IyEvYmluL3NoCiMjCiMjICBHTlUgc2h0b29sIC0tIFRoZSBHTlUgUG9ydGFibGUgU2hlbGwgVG9vbAojIyAgQ29weXJpZ2h0IChjKSAxOTk0LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KIyMKIyMgIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2h0b29sLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIyMgIFNlZSBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvc2h0b29sLyBmb3IgbGF0ZXN0IHZlcnNpb24uCiMjCiMjICBWZXJzaW9uOiAgMi4wLjYgKDE5LUFwci0yMDA2KQojIyAgQ29udGVudHM6IGFsbCBhdmFpbGFibGUgbW9kdWxlcwojIwoKIyMKIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMjCiMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCiMjICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMjCiMjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyMgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAojIyAgVVNBLCBvciBjb250YWN0IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+LgojIwojIyAgTk9USUNFOiBHaXZlbiB0aGF0IHlvdSBpbmNsdWRlIHRoaXMgZmlsZSB2ZXJiYXRpbSBpbnRvIHlvdXIgb3duCiMjICBzb3VyY2UgdHJlZSwgeW91IGFyZSBqdXN0aWZpZWQgaW4gc2F5aW5nIHRoYXQgaXQgcmVtYWlucyBzZXBhcmF0ZQojIyAgZnJvbSB5b3VyIHBhY2thZ2UsIGFuZCB0aGF0IHRoaXMgd2F5IHlvdSBhcmUgc2ltcGx5IGp1c3QgdXNpbmcgR05VCiMjICBzaHRvb2wuIFNvLCBpbiB0aGlzIHNpdHVhdGlvbiwgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgdGhhdCB5b3VyCiMjICBwYWNrYWdlIGl0c2VsZiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW4KIyMgIG9yZGVyIHRvIHRha2UgYWR2YW50YWdlIG9mIEdOVSBzaHRvb2wuCiMjCgojIwojIyAgVXNhZ2U6IHNodG9vbCBbPG9wdGlvbnM+XSBbPGNtZC1uYW1lPiBbPGNtZC1vcHRpb25zPl0gWzxjbWQtYXJncz5dXQojIwojIyAgQXZhaWxhYmxlIGNvbW1hbmRzOgojIyAgICBlY2hvICAgICAgIFByaW50IHN0cmluZyB3aXRoIG9wdGlvbmFsIGNvbnN0cnVjdCBleHBhbnNpb24KIyMgICAgbWRhdGUgICAgICBQcmV0dHktcHJpbnQgbW9kaWZpY2F0aW9uIHRpbWUgb2YgYSBmaWxlIG9yIGRpcgojIyAgICB0YWJsZSAgICAgIFByZXR0eS1wcmludCBhIGZpZWxkLXNlcGFyYXRlZCBsaXN0IGFzIGEgdGFibGUKIyMgICAgcHJvcCAgICAgICBEaXNwbGF5IHByb2dyZXNzIHdpdGggYSBydW5uaW5nIHByb3BlbGxlcgojIyAgICBtb3ZlICAgICAgIE1vdmUgZmlsZXMgd2l0aCBzaW11bHRhbmVvdXMgc3Vic3RpdHV0aW9uCiMjICAgIGluc3RhbGwgICAgSW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCBvciBkYXRhZmlsZQojIyAgICBta2RpciAgICAgIE1ha2Ugb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMKIyMgICAgbWtsbiAgICAgICBNYWtlIGxpbmsgd2l0aCBjYWxjdWxhdGlvbiBvZiByZWxhdGl2ZSBwYXRocwojIyAgICBta3NoYWRvdyAgIE1ha2UgYSBzaGFkb3cgdHJlZSB0aHJvdWdoIHN5bWJvbGljIGxpbmtzCiMjICAgIGZpeHBlcm0gICAgRml4IGZpbGUgcGVybWlzc2lvbnMgaW5zaWRlIGEgc291cmNlIHRyZWUKIyMgICAgcm90YXRlICAgICBMb2dmaWxlIHJvdGF0aW9uCiMjICAgIHRhcmJhbGwgICAgUm9sbCBkaXN0cmlidXRpb24gdGFyYmFsbHMKIyMgICAgc3Vic3QgICAgICBBcHBseSBzZWQoMSkgc3Vic3RpdHV0aW9uIG9wZXJhdGlvbnMKIyMgICAgcGxhdGZvcm0gICBQbGF0Zm9ybSBJZGVudGlmaWNhdGlvbiBVdGlsaXR5CiMjICAgIGFyeCAgICAgICAgRXh0ZW5kZWQgYXJjaGl2ZSBjb21tYW5kCiMjICAgIHNsbyAgICAgICAgU2VwYXJhdGUgbGlua2VyIG9wdGlvbnMgYnkgbGlicmFyeSBjbGFzcwojIyAgICBzY3BwICAgICAgIFNoYXJpbmcgQyBQcmUtUHJvY2Vzc29yCiMjICAgIHZlcnNpb24gICAgTWFpbnRhaW4gYSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZpbGUKIyMgICAgcGF0aCAgICAgICBEZWFsIHdpdGggcHJvZ3JhbSBwYXRocwojIwoKIyAgIG1heGltdW0gQm91cm5lLVNoZWxsIGNvbXBhdGliaWxpdHkKaWYgWyAiLiRaU0hfVkVSU0lPTiIgIT0gLiBdICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICMgICByZWNvbmZpZ3VyZSB6c2goMSkKICAgIGVtdWxhdGUgc2gKICAgIE5VTExDTUQ9OgogICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCmVsaWYgWyAiLiRCQVNIX1ZFUlNJT04iICE9IC4gXSAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICMgICByZWNvbmZpZ3VyZSBiYXNoKDEpCiAgICBzZXQgLW8gcG9zaXgKZmkKCiMgICBtYXhpbXVtIGluZGVwZW5kZW5jZSBvZiBOTFMgbnVpc2FuY2VzCmZvciB2YXIgaW4gXAogICAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKICAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCiAgICBMQ19URUxFUEhPTkUgTENfVElNRQpkbwogICAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICR2YXI9QzsgZXhwb3J0ICR2YXIpIDI+JjFgIik7IHRoZW4KICAgICAgICBldmFsICR2YXI9QzsgZXhwb3J0ICR2YXIKICAgIGVsc2UKICAgICAgICB1bnNldCAkdmFyCiAgICBmaQpkb25lCgojICAgaW5pdGlhbCBjb21tYW5kIGxpbmUgaGFuZGxpbmcKaWYgWyAkIyAtZXEgMCBdOyB0aGVuCiAgICBlY2hvICIkMDpFcnJvcjogaW52YWxpZCBjb21tYW5kIGxpbmUiIDE+JjIKICAgIGVjaG8gIiQwOkhpbnQ6ICBydW4gXGAkMCAtaCcgZm9yIHVzYWdlIiAxPiYyCiAgICBleGl0IDEKZmkKaWYgWyAiLiQxIiA9ICIuLWgiIF0gfHwgWyAiLiQxIiA9ICIuLS1oZWxwIiBdOyB0aGVuCiAgICBlY2hvICJUaGlzIGlzIEdOVSBzaHRvb2wsIHZlcnNpb24gMi4wLjYgKDE5LUFwci0yMDA2KSIKICAgIGVjaG8gJ0NvcHlyaWdodCAoYykgMTk5NC0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+JwogICAgZWNobyAnUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1zaHRvb2xAZ251Lm9yZz4nCiAgICBlY2hvICcnCiAgICBlY2hvICdVc2FnZTogc2h0b29sIFs8b3B0aW9ucz5dIFs8Y21kLW5hbWU+IFs8Y21kLW9wdGlvbnM+XSBbPGNtZC1hcmdzPl1dJwogICAgZWNobyAnJwogICAgZWNobyAnQXZhaWxhYmxlIGdsb2JhbCA8b3B0aW9ucz46JwogICAgZWNobyAnICAtdiwgLS12ZXJzaW9uICAgZGlzcGxheSBzaHRvb2wgdmVyc2lvbiBpbmZvcm1hdGlvbicKICAgIGVjaG8gJyAgLWgsIC0taGVscCAgICAgIGRpc3BsYXkgc2h0b29sIHVzYWdlIGhlbHAgcGFnZSAodGhpcyBvbmUpJwogICAgZWNobyAnICAtZCwgLS1kZWJ1ZyAgICAgZGlzcGxheSBzaGVsbCB0cmFjZSBpbmZvcm1hdGlvbicKICAgIGVjaG8gJyAgLXIsIC0tcmVjcmVhdGUgIHJlY3JlYXRlIHRoaXMgc2h0b29sIHNjcmlwdCB2aWEgc2h0b29saXplJwogICAgZWNobyAnJwogICAgZWNobyAnQXZhaWxhYmxlIDxjbWQtbmFtZT4gWzxjbWQtb3B0aW9ucz5dIFs8Y21kLWFyZ3M+XTonCiAgICBlY2hvICcgIGVjaG8gICAgIFstbnwtLW5ld2xpbmVdIFstZXwtLWV4cGFuZF0gWzxzdHJpbmc+IC4uLl0nCiAgICBlY2hvICcgIG1kYXRlICAgIFstbnwtLW5ld2xpbmVdIFstenwtLXplcm9dIFstc3wtLXNob3J0ZW5dIFstZHwtLWRpZ2l0c10nCiAgICBlY2hvICcgICAgICAgICAgIFstZnwtLWZpZWxkLXNlcCA8c3RyPl0gWy1vfC0tb3JkZXIgPHNwZWM+XSA8cGF0aD4nCiAgICBlY2hvICcgIHRhYmxlICAgIFstRnwtLWZpZWxkLXNlcCA8c2VwPl0gWy13fC0td2lkdGggPHdpZHRoPl0gWy1jfC0tY29sdW1ucycKICAgIGVjaG8gJyAgICAgICAgICAgPGNvbHM+XSBbLXN8LS1zdHJpcCA8c3RyaXA+XSA8c3RyPjxzZXA+PHN0cj4uLi4nCiAgICBlY2hvICcgIHByb3AgICAgIFstcHwtLXByZWZpeCA8c3RyPl0nCiAgICBlY2hvICcgIG1vdmUgICAgIFstdnwtLXZlcmJvc2VdIFstdHwtLXRyYWNlXSBbLWV8LS1leHBhbmRdIFstcHwtLXByZXNlcnZlXScKICAgIGVjaG8gJyAgICAgICAgICAgPHNyYy1maWxlPiA8ZHN0LWZpbGU+JwogICAgZWNobyAnICBpbnN0YWxsICBbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1kfC0tbWtkaXJdIFstY3wtLWNvcHldJwogICAgZWNobyAnICAgICAgICAgICBbLUN8LS1jb21wYXJlLWNvcHldIFstc3wtLXN0cmlwXSBbLW18LS1tb2RlIDxtb2RlPl0nCiAgICBlY2hvICcgICAgICAgICAgIFstb3wtLW93bmVyIDxvd25lcj5dIFstZ3wtLWdyb3VwIDxncm91cD5dIFstZXwtLWV4ZWMnCiAgICBlY2hvICcgICAgICAgICAgIDxzZWQtY21kPl0gPGZpbGU+IFs8ZmlsZT4gLi4uXSA8cGF0aD4nCiAgICBlY2hvICcgIG1rZGlyICAgIFstdHwtLXRyYWNlXSBbLWZ8LS1mb3JjZV0gWy1wfC0tcGFyZW50c10gWy1tfC0tbW9kZScKICAgIGVjaG8gJyAgICAgICAgICAgPG1vZGU+XSBbLW98LS1vd25lciA8b3duZXI+XSBbLWd8LS1ncm91cCA8Z3JvdXA+XSA8ZGlyPicKICAgIGVjaG8gJyAgICAgICAgICAgWzxkaXI+IC4uLl0nCiAgICBlY2hvICcgIG1rbG4gICAgIFstdHwtLXRyYWNlXSBbLWZ8LS1mb3JjZV0gWy1zfC0tc3ltYm9saWNdIDxzcmMtcGF0aD4nCiAgICBlY2hvICcgICAgICAgICAgIFs8c3JjLXBhdGg+IC4uLl0gPGRzdC1wYXRoPicKICAgIGVjaG8gJyAgbWtzaGFkb3cgWy12fC0tdmVyYm9zZV0gWy10fC0tdHJhY2VdIFstYXwtLWFsbF0gPHNyYy1kaXI+IDxkc3QtZGlyPicKICAgIGVjaG8gJyAgZml4cGVybSAgWy12fC0tdmVyYm9zZV0gWy10fC0tdHJhY2VdIDxwYXRoPiBbPHBhdGg+IC4uLl0nCiAgICBlY2hvICcgIHJvdGF0ZSAgIFstdnwtLXZlcmJvc2VdIFstdHwtLXRyYWNlXSBbLWZ8LS1mb3JjZV0gWy1ufC0tbnVtLWZpbGVzJwogICAgZWNobyAnICAgICAgICAgICA8Y291bnQ+XSBbLXN8LS1zaXplIDxzaXplPl0gWy1jfC0tY29weV0gWy1yfC0tcmVtb3ZlXScKICAgIGVjaG8gJyAgICAgICAgICAgWy1hfC0tYXJjaGl2ZS1kaXIgPGRpcj5dIFstenwtLWNvbXByZXNzIFs8dG9vbD46XTxsZXZlbD5dJwogICAgZWNobyAnICAgICAgICAgICBbLWJ8LS1iYWNrZ3JvdW5kXSBbLWR8LS1kZWxheV0gWy1wfC0tcGFkIDxsZW4+XSBbLW18LS1tb2RlJwogICAgZWNobyAnICAgICAgICAgICA8bW9kZT5dIFstb3wtLW93bmVyIDxvd25lcj5dIFstZ3wtLWdyb3VwIDxncm91cD5dIFstTXwtLW1pZ3JhdGUnCiAgICBlY2hvICcgICAgICAgICAgIDxjbWQ+XSBbLVB8LS1wcm9sb2cgPGNtZD5dIFstRXwtLWVwaWxvZyA8Y21kPl0gPGZpbGU+IFsuLi5dJwogICAgZWNobyAnICB0YXJiYWxsICBbLXR8LS10cmFjZV0gWy12fC0tdmVyYm9zZV0gWy1vfC0tb3V0cHV0IDx0YXJiYWxsPl0nCiAgICBlY2hvICcgICAgICAgICAgIFstY3wtLWNvbXByZXNzIDxwcm9nPl0gWy1kfC0tZGlyZWN0b3J5IDxkaXI+XSBbLXV8LS11c2VyJwogICAgZWNobyAnICAgICAgICAgICA8dXNlcj5dIFstZ3wtLWdyb3VwIDxncm91cD5dIFstZXwtLWV4Y2x1ZGUgPHBhdHRlcm4+XScKICAgIGVjaG8gJyAgICAgICAgICAgPHBhdGg+IFs8cGF0aD4gLi4uXScKICAgIGVjaG8gJyAgc3Vic3QgICAgWy12fC0tdmVyYm9zZV0gWy10fC0tdHJhY2VdIFstbnwtLW5vcF0gWy13fC0td2FybmluZ10nCiAgICBlY2hvICcgICAgICAgICAgIFstcXwtLXF1aWV0XSBbLXN8LS1zdGVhbHRoXSBbLWl8LS1pbnRlcmFjdGl2ZV0gWy1ifC0tYmFja3VwJwogICAgZWNobyAnICAgICAgICAgICA8ZXh0Pl0gWy1lfC0tZXhlYyA8Y21kPl0gWy1mfC0tZmlsZSA8Y21kLWZpbGU+XSBbPGZpbGU+XScKICAgIGVjaG8gJyAgICAgICAgICAgWy4uLl0nCiAgICBlY2hvICcgIHBsYXRmb3JtIFstRnwtLWZvcm1hdCA8Zm9ybWF0Pl0gWy1TfC0tc2VwIDxzdHJpbmc+XSBbLUN8LS1jb25jJwogICAgZWNobyAnICAgICAgICAgICA8c3RyaW5nPl0gWy1MfC0tbG93ZXJdIFstVXwtLXVwcGVyXSBbLXZ8LS12ZXJib3NlXScKICAgIGVjaG8gJyAgICAgICAgICAgWy1jfC0tY29uY2lzZV0gWy1ufC0tbm8tbmV3bGluZV0gWy10fC0tdHlwZSA8dHlwZT5dJwogICAgZWNobyAnICAgICAgICAgICBbLVZ8LS12ZXJzaW9uXSBbLWh8LS1oZWxwXScKICAgIGVjaG8gJyAgYXJ4ICAgICAgWy10fC0tdHJhY2VdIFstQ3wtLWNvbW1hbmQgPGNtZD5dIDxvcD4gPGFyY2hpdmU+IFs8ZmlsZT4nCiAgICBlY2hvICcgICAgICAgICAgIC4uLl0nCiAgICBlY2hvICcgIHNsbyAgICAgIFstcHwtLXByZWZpeCA8c3RyPl0gLS0gLUw8ZGlyPiAtbDxsaWI+IFstTDxkaXI+IC1sPGxpYj4nCiAgICBlY2hvICcgICAgICAgICAgIC4uLl0nCiAgICBlY2hvICcgIHNjcHAgICAgIFstdnwtLXZlcmJvc2VdIFstcHwtLXByZXNlcnZlXSBbLWZ8LS1maWx0ZXIgPGZpbHRlcj5dJwogICAgZWNobyAnICAgICAgICAgICBbLW98LS1vdXRwdXQgPG9maWxlPl0gWy10fC0tdGVtcGxhdGUgPHRmaWxlPl0gWy1NfC0tbWFyaycKICAgIGVjaG8gJyAgICAgICAgICAgPG1hcms+XSBbLUR8LS1kZWZpbmUgPGRuYW1lPl0gWy1DfC0tY2xhc3MgPGNuYW1lPl0nCiAgICBlY2hvICcgICAgICAgICAgIDxmaWxlPiBbPGZpbGU+IC4uLl0nCiAgICBlY2hvICcgIHZlcnNpb24gIFstbHwtLWxhbmd1YWdlIDxsYW5nPl0gWy1ufC0tbmFtZSA8bmFtZT5dIFstcHwtLXByZWZpeCcKICAgIGVjaG8gJyAgICAgICAgICAgPHByZWZpeD5dIFstc3wtLXNldCA8dmVyc2lvbj5dIFstZXwtLWVkaXRdIFstaXwtLWluY3JlYXNlJwogICAgZWNobyAnICAgICAgICAgICA8a25vYj5dIFstZHwtLWRpc3BsYXkgPHR5cGU+XSA8ZmlsZT4nCiAgICBlY2hvICcgIHBhdGggICAgIFstc3wtLXN1cHByZXNzXSBbLXJ8LS1yZXZlcnNlXSBbLWR8LS1kaXJuYW1lXSBbLWJ8LS1iYXNlbmFtZV0nCiAgICBlY2hvICcgICAgICAgICAgIFstbXwtLW1hZ2ljXSBbLXB8LS1wYXRoIDxwYXRoPl0gPHN0cj4gWzxzdHI+IC4uLl0nCiAgICBlY2hvICcnCiAgICBleGl0IDAKZmkKaWYgWyAiLiQxIiA9ICIuLXYiIF0gfHwgWyAiLiQxIiA9ICIuLS12ZXJzaW9uIiBdOyB0aGVuCiAgICBlY2hvICJHTlUgc2h0b29sIDIuMC42ICgxOS1BcHItMjAwNikiCiAgICBleGl0IDAKZmkKaWYgWyAiLiQxIiA9ICIuLXIiIF0gfHwgWyAiLiQxIiA9ICIuLS1yZWNyZWF0ZSIgXTsgdGhlbgogICAgc2h0b29saXplIC1vc2h0b29sIGFsbAogICAgZXhpdCAwCmZpCmlmIFsgIi4kMSIgPSAiLi1kIiBdIHx8IFsgIi4kMSIgPSAiLi0tZGVidWciIF07IHRoZW4KICAgIHNoaWZ0CiAgICBzZXQgLXgKZmkKbmFtZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7JyAtZSAnczstc2gkOzsnIC1lICdzO1wuc2gkOzsnYApjYXNlICIkbmFtZSIgaW4KICAgIGVjaG98bWRhdGV8dGFibGV8cHJvcHxtb3ZlfGluc3RhbGx8bWtkaXJ8bWtsbnxta3NoYWRvd3xmaXhwZXJtfHJvdGF0ZXx0YXJiYWxsfHN1YnN0fHBsYXRmb3JtfGFyeHxzbG98c2NwcHx2ZXJzaW9ufHBhdGggKQogICAgICAgICMgICBpbXBsaWNpdCB0b29sIGNvbW1hbmQgc2VsZWN0aW9uCiAgICAgICAgdG9vbD0iJG5hbWUiCiAgICAgICAgOzsKICAgICogKQogICAgICAgICMgICBleHBsaWNpdCB0b29sIGNvbW1hbmQgc2VsZWN0aW9uCiAgICAgICAgdG9vbD0iJDEiCiAgICAgICAgc2hpZnQKICAgICAgICA7Owplc2FjCmFyZ19zcGVjPSIiCm9wdF9zcGVjPSIiCmdlbl90bXBmaWxlPW5vCgojIwojIyAgRElTUEFUQ0ggSU5UTyBTQ1JJUFQgUFJPTE9HCiMjCgpjYXNlICR0b29sIGluCiAgICBlY2hvICkKICAgICAgICBzdHJfdG9vbD0iZWNobyIKICAgICAgICBzdHJfdXNhZ2U9IlstbnwtLW5ld2xpbmVdIFstZXwtLWV4cGFuZF0gWzxzdHJpbmc+IC4uLl0iCiAgICAgICAgYXJnX3NwZWM9IjArIgogICAgICAgIG9wdF9zcGVjPSJuLmUuIgogICAgICAgIG9wdF9hbGlhcz0ibjpuZXdsaW5lLGU6ZXhwYW5kIgogICAgICAgIG9wdF9uPW5vCiAgICAgICAgb3B0X2U9bm8KICAgICAgICA7OwogICAgbWRhdGUgKQogICAgICAgIHN0cl90b29sPSJtZGF0ZSIKICAgICAgICBzdHJfdXNhZ2U9IlstbnwtLW5ld2xpbmVdIFstenwtLXplcm9dIFstc3wtLXNob3J0ZW5dIFstZHwtLWRpZ2l0c10gWy1mfC0tZmllbGQtc2VwIDxzdHI+XSBbLW98LS1vcmRlciA8c3BlYz5dIDxwYXRoPiIKICAgICAgICBhcmdfc3BlYz0iMT0iCiAgICAgICAgb3B0X3NwZWM9Im4uei5zLmQuZjpvOiIKICAgICAgICBvcHRfYWxpYXM9Im46bmV3bGluZSx6Onplcm8sczpzaG9ydGVuLGQ6ZGlnaXRzLGY6ZmllbGQtc2VwLG86b3JkZXIiCiAgICAgICAgb3B0X249bm8KICAgICAgICBvcHRfej1ubwogICAgICAgIG9wdF9zPW5vCiAgICAgICAgb3B0X2Q9bm8KICAgICAgICBvcHRfZj0iICIKICAgICAgICBvcHRfbz0iZG15IgogICAgICAgIDs7CiAgICB0YWJsZSApCiAgICAgICAgc3RyX3Rvb2w9InRhYmxlIgogICAgICAgIHN0cl91c2FnZT0iWy1GfC0tZmllbGQtc2VwIDxzZXA+XSBbLXd8LS13aWR0aCA8d2lkdGg+XSBbLWN8LS1jb2x1bW5zIDxjb2xzPl0gWy1zfC0tc3RyaXAgPHN0cmlwPl0gPHN0cj48c2VwPjxzdHI+Li4uIgogICAgICAgIGFyZ19zcGVjPSIxKyIKICAgICAgICBvcHRfc3BlYz0iRjp3OmM6czoiCiAgICAgICAgb3B0X2FsaWFzPSJGOmZpZWxkLXNlcCx3OndpZHRoLGM6Y29sdW1ucyxzOnN0cmlwIgogICAgICAgIG9wdF9GPSI6IgogICAgICAgIG9wdF93PTE1CiAgICAgICAgb3B0X2M9MwogICAgICAgIG9wdF9zPTc5CiAgICAgICAgOzsKICAgIHByb3AgKQogICAgICAgIHN0cl90b29sPSJwcm9wIgogICAgICAgIHN0cl91c2FnZT0iWy1wfC0tcHJlZml4IDxzdHI+XSIKICAgICAgICBhcmdfc3BlYz0iMD0iCiAgICAgICAgb3B0X3NwZWM9InA6IgogICAgICAgIG9wdF9hbGlhcz0icDpwcmVmaXgiCiAgICAgICAgb3B0X3A9IiIKICAgICAgICA7OwogICAgbW92ZSApCiAgICAgICAgc3RyX3Rvb2w9Im1vdmUiCiAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1lfC0tZXhwYW5kXSBbLXB8LS1wcmVzZXJ2ZV0gPHNyYy1maWxlPiA8ZHN0LWZpbGU+IgogICAgICAgIGFyZ19zcGVjPSIyPSIKICAgICAgICBvcHRfc3BlYz0idi50LmUucC4iCiAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UsdDp0cmFjZSxlOmV4cGFuZCxwOnByZXNlcnZlIgogICAgICAgIG9wdF92PW5vCiAgICAgICAgb3B0X3Q9bm8KICAgICAgICBvcHRfZT1ubwogICAgICAgIG9wdF9wPW5vCiAgICAgICAgOzsKICAgIGluc3RhbGwgKQogICAgICAgIHN0cl90b29sPSJpbnN0YWxsIgogICAgICAgIHN0cl91c2FnZT0iWy12fC0tdmVyYm9zZV0gWy10fC0tdHJhY2VdIFstZHwtLW1rZGlyXSBbLWN8LS1jb3B5XSBbLUN8LS1jb21wYXJlLWNvcHldIFstc3wtLXN0cmlwXSBbLW18LS1tb2RlIDxtb2RlPl0gWy1vfC0tb3duZXIgPG93bmVyPl0gWy1nfC0tZ3JvdXAgPGdyb3VwPl0gWy1lfC0tZXhlYyA8c2VkLWNtZD5dIDxmaWxlPiBbPGZpbGU+IC4uLl0gPHBhdGg+IgogICAgICAgIGFyZ19zcGVjPSIxKyIKICAgICAgICBvcHRfc3BlYz0idi50LmQuYy5DLnMubTpvOmc6ZSsiCiAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UsdDp0cmFjZSxkOm1rZGlyLGM6Y29weSxDOmNvbXBhcmUtY29weSxzOnN0cmlwLG06bW9kZSxvOm93bmVyLGc6Z3JvdXAsZTpleGVjIgogICAgICAgIG9wdF92PW5vCiAgICAgICAgb3B0X3Q9bm8KICAgICAgICBvcHRfZD1ubwogICAgICAgIG9wdF9jPW5vCiAgICAgICAgb3B0X0M9bm8KICAgICAgICBvcHRfcz1ubwogICAgICAgIG9wdF9tPSIwNzU1IgogICAgICAgIG9wdF9vPSIiCiAgICAgICAgb3B0X2c9IiIKICAgICAgICBvcHRfZT0iIgogICAgICAgIDs7CiAgICBta2RpciApCiAgICAgICAgc3RyX3Rvb2w9Im1rZGlyIgogICAgICAgIHN0cl91c2FnZT0iWy10fC0tdHJhY2VdIFstZnwtLWZvcmNlXSBbLXB8LS1wYXJlbnRzXSBbLW18LS1tb2RlIDxtb2RlPl0gWy1vfC0tb3duZXIgPG93bmVyPl0gWy1nfC0tZ3JvdXAgPGdyb3VwPl0gPGRpcj4gWzxkaXI+IC4uLl0iCiAgICAgICAgYXJnX3NwZWM9IjErIgogICAgICAgIG9wdF9zcGVjPSJ0LmYucC5tOm86ZzoiCiAgICAgICAgb3B0X2FsaWFzPSJ0OnRyYWNlLGY6Zm9yY2UscDpwYXJlbnRzLG06bW9kZSxvOm93bmVyLGc6Z3JvdXAiCiAgICAgICAgb3B0X3Q9bm8KICAgICAgICBvcHRfZj1ubwogICAgICAgIG9wdF9wPW5vCiAgICAgICAgb3B0X209IiIKICAgICAgICBvcHRfbz0iIgogICAgICAgIG9wdF9nPSIiCiAgICAgICAgOzsKICAgIG1rbG4gKQogICAgICAgIHN0cl90b29sPSJta2xuIgogICAgICAgIHN0cl91c2FnZT0iWy10fC0tdHJhY2VdIFstZnwtLWZvcmNlXSBbLXN8LS1zeW1ib2xpY10gPHNyYy1wYXRoPiBbPHNyYy1wYXRoPiAuLi5dIDxkc3QtcGF0aD4iCiAgICAgICAgYXJnX3NwZWM9IjIrIgogICAgICAgIG9wdF9zcGVjPSJ0LmYucy4iCiAgICAgICAgb3B0X2FsaWFzPSJ0OnRyYWNlLGY6Zm9yY2UsczpzeW1ib2xpYyIKICAgICAgICBvcHRfdD1ubwogICAgICAgIG9wdF9mPW5vCiAgICAgICAgb3B0X3M9bm8KICAgICAgICA7OwogICAgbWtzaGFkb3cgKQogICAgICAgIHN0cl90b29sPSJta3NoYWRvdyIKICAgICAgICBzdHJfdXNhZ2U9IlstdnwtLXZlcmJvc2VdIFstdHwtLXRyYWNlXSBbLWF8LS1hbGxdIDxzcmMtZGlyPiA8ZHN0LWRpcj4iCiAgICAgICAgYXJnX3NwZWM9IjI9IgogICAgICAgIG9wdF9zcGVjPSJ2LnQuYS4iCiAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UsdDp0cmFjZSxhOmFsbCIKICAgICAgICBvcHRfdj1ubwogICAgICAgIG9wdF90PW5vCiAgICAgICAgb3B0X2E9bm8KICAgICAgICA7OwogICAgZml4cGVybSApCiAgICAgICAgc3RyX3Rvb2w9ImZpeHBlcm0iCiAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gPHBhdGg+IFs8cGF0aD4gLi4uXSIKICAgICAgICBhcmdfc3BlYz0iMSsiCiAgICAgICAgb3B0X3NwZWM9InYudC4iCiAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UsdDp0cmFjZSIKICAgICAgICBvcHRfdj1ubwogICAgICAgIG9wdF90PW5vCiAgICAgICAgOzsKICAgIHJvdGF0ZSApCiAgICAgICAgc3RyX3Rvb2w9InJvdGF0ZSIKICAgICAgICBzdHJfdXNhZ2U9IlstdnwtLXZlcmJvc2VdIFstdHwtLXRyYWNlXSBbLWZ8LS1mb3JjZV0gWy1ufC0tbnVtLWZpbGVzIDxjb3VudD5dIFstc3wtLXNpemUgPHNpemU+XSBbLWN8LS1jb3B5XSBbLXJ8LS1yZW1vdmVdIFstYXwtLWFyY2hpdmUtZGlyIDxkaXI+XSBbLXp8LS1jb21wcmVzcyBbPHRvb2w+Ol08bGV2ZWw+XSBbLWJ8LS1iYWNrZ3JvdW5kXSBbLWR8LS1kZWxheV0gWy1wfC0tcGFkIDxsZW4+XSBbLW18LS1tb2RlIDxtb2RlPl0gWy1vfC0tb3duZXIgPG93bmVyPl0gWy1nfC0tZ3JvdXAgPGdyb3VwPl0gWy1NfC0tbWlncmF0ZSA8Y21kPl0gWy1QfC0tcHJvbG9nIDxjbWQ+XSBbLUV8LS1lcGlsb2cgPGNtZD5dIDxmaWxlPiBbLi4uXSIKICAgICAgICBhcmdfc3BlYz0iMSsiCiAgICAgICAgb3B0X3NwZWM9InYudC5mLm46czpjLnIuYTp6OmIuZC5wOm86ZzptOk06UDpFOiIKICAgICAgICBvcHRfYWxpYXM9InY6dmVyYm9zZSx0OnRyYWNlLGY6Zm9yY2UsbjpudW0tZmlsZXMsczpzaXplLGM6Y29weSxyOnJlbW92ZSxhOmFyY2hpdmUtZGlyLHo6Y29tcHJlc3MsYjpiYWNrZ3JvdW5kLGQ6ZGVsYXkscDpwYWQsbzpvd25lcixnOmdyb3VwLG06bW9kZSxNOm1pZ3JhdGUsUDpwcm9sb2csRTplcGlsb2ciCiAgICAgICAgb3B0X3Y9bm8KICAgICAgICBvcHRfdD1ubwogICAgICAgIG9wdF9mPW5vCiAgICAgICAgb3B0X249MTAKICAgICAgICBvcHRfcz0iIgogICAgICAgIG9wdF9jPW5vCiAgICAgICAgb3B0X3I9bm8KICAgICAgICBvcHRfYT0iIgogICAgICAgIG9wdF96PSIiCiAgICAgICAgb3B0X2I9bm8KICAgICAgICBvcHRfZD1ubwogICAgICAgIG9wdF9wPTEKICAgICAgICBvcHRfbz0iIgogICAgICAgIG9wdF9nPSIiCiAgICAgICAgb3B0X209IiIKICAgICAgICBvcHRfTT0iIgogICAgICAgIG9wdF9QPSIiCiAgICAgICAgb3B0X0U9IiIKICAgICAgICA7OwogICAgdGFyYmFsbCApCiAgICAgICAgc3RyX3Rvb2w9InRhcmJhbGwiCiAgICAgICAgc3RyX3VzYWdlPSJbLXR8LS10cmFjZV0gWy12fC0tdmVyYm9zZV0gWy1vfC0tb3V0cHV0IDx0YXJiYWxsPl0gWy1jfC0tY29tcHJlc3MgPHByb2c+XSBbLWR8LS1kaXJlY3RvcnkgPGRpcj5dIFstdXwtLXVzZXIgPHVzZXI+XSBbLWd8LS1ncm91cCA8Z3JvdXA+XSBbLWV8LS1leGNsdWRlIDxwYXR0ZXJuPl0gPHBhdGg+IFs8cGF0aD4gLi4uXSIKICAgICAgICBnZW5fdG1wZmlsZT15ZXMKICAgICAgICBhcmdfc3BlYz0iMSsiCiAgICAgICAgb3B0X3NwZWM9InQudi5vOmM6ZDp1Omc6ZToiCiAgICAgICAgb3B0X2FsaWFzPSJ0OnRyYWNlLHY6dmVyYm9zZSxvOm91dHB1dCxjOmNvbXByZXNzLGQ6ZGlyZWN0b3J5LHU6dXNlcixnOmdyb3VwLGU6ZXhjbHVkZSIKICAgICAgICBvcHRfdD1ubwogICAgICAgIG9wdF92PW5vCiAgICAgICAgb3B0X289IiIKICAgICAgICBvcHRfYz0iIgogICAgICAgIG9wdF9kPSIiCiAgICAgICAgb3B0X3U9IiIKICAgICAgICBvcHRfZz0iIgogICAgICAgIG9wdF9lPSJDVlMsXFwuY3ZzaWdub3JlLFxcLnN2bixcXC5bb2FdXCQiCiAgICAgICAgOzsKICAgIHN1YnN0ICkKICAgICAgICBzdHJfdG9vbD0ic3Vic3QiCiAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1ufC0tbm9wXSBbLXd8LS13YXJuaW5nXSBbLXF8LS1xdWlldF0gWy1zfC0tc3RlYWx0aF0gWy1pfC0taW50ZXJhY3RpdmVdIFstYnwtLWJhY2t1cCA8ZXh0Pl0gWy1lfC0tZXhlYyA8Y21kPl0gWy1mfC0tZmlsZSA8Y21kLWZpbGU+XSBbPGZpbGU+XSBbLi4uXSIKICAgICAgICBnZW5fdG1wZmlsZT15ZXMKICAgICAgICBhcmdfc3BlYz0iMCsiCiAgICAgICAgb3B0X3NwZWM9InYudC5uLncucS5zLmkuYjplK2Y6IgogICAgICAgIG9wdF9hbGlhcz0idjp2ZXJib3NlLHQ6dHJhY2Usbjpub3Asdzp3YXJuaW5nLHE6cXVpZXQsczpzdGVhbHRoLGk6aW50ZXJhY3RpdmUsYjpiYWNrdXAsZTpleGVjLGY6ZmlsZSIKICAgICAgICBvcHRfdj1ubwogICAgICAgIG9wdF90PW5vCiAgICAgICAgb3B0X249bm8KICAgICAgICBvcHRfdz1ubwogICAgICAgIG9wdF9xPW5vCiAgICAgICAgb3B0X3M9bm8KICAgICAgICBvcHRfaT1ubwogICAgICAgIG9wdF9iPSIiCiAgICAgICAgb3B0X2U9IiIKICAgICAgICBvcHRfZj0iIgogICAgICAgIDs7CiAgICBwbGF0Zm9ybSApCiAgICAgICAgc3RyX3Rvb2w9InBsYXRmb3JtIgogICAgICAgIHN0cl91c2FnZT0iWy1GfC0tZm9ybWF0IDxmb3JtYXQ+XSBbLVN8LS1zZXAgPHN0cmluZz5dIFstQ3wtLWNvbmMgPHN0cmluZz5dIFstTHwtLWxvd2VyXSBbLVV8LS11cHBlcl0gWy12fC0tdmVyYm9zZV0gWy1jfC0tY29uY2lzZV0gWy1ufC0tbm8tbmV3bGluZV0gWy10fC0tdHlwZSA8dHlwZT5dIFstVnwtLXZlcnNpb25dIFstaHwtLWhlbHBdIgogICAgICAgIGFyZ19zcGVjPSIwPSIKICAgICAgICBvcHRfc3BlYz0iRjpTOkM6TC5VLnYuYy5uLnQ6ZC5WLmguIgogICAgICAgIG9wdF9hbGlhcz0iRjpmb3JtYXQsUzpzZXAsQzpjb25jLEw6bG93ZXIsVTp1cHBlcix2OnZlcmJvc2UsYzpjb25zaXNlLHQ6dHlwZSxuOm5vLW5ld2xpbmUsVjp2ZXJzaW9uLGg6aGVscCIKICAgICAgICBvcHRfRj0iJXtzcH0gKCV7YXB9KSIKICAgICAgICBvcHRfUz0iICIKICAgICAgICBvcHRfQz0iLyIKICAgICAgICBvcHRfTD1ubwogICAgICAgIG9wdF9VPW5vCiAgICAgICAgb3B0X3Q9IiIKICAgICAgICBvcHRfdj1ubwogICAgICAgIG9wdF9jPW5vCiAgICAgICAgb3B0X249bm8KICAgICAgICBvcHRfVj1ubwogICAgICAgIG9wdF9oPW5vCiAgICAgICAgOzsKICAgIGFyeCApCiAgICAgICAgc3RyX3Rvb2w9ImFyeCIKICAgICAgICBzdHJfdXNhZ2U9IlstdHwtLXRyYWNlXSBbLUN8LS1jb21tYW5kIDxjbWQ+XSA8b3A+IDxhcmNoaXZlPiBbPGZpbGU+IC4uLl0iCiAgICAgICAgYXJnX3NwZWM9IjIrIgogICAgICAgIG9wdF9zcGVjPSJ0LkM6IgogICAgICAgIG9wdF9hbGlhcz0idDp0cmFjZSxDOmNvbW1hbmQiCiAgICAgICAgb3B0X3Q9bm8KICAgICAgICBvcHRfQz0iYXIiCiAgICAgICAgOzsKICAgIHNsbyApCiAgICAgICAgc3RyX3Rvb2w9InNsbyIKICAgICAgICBzdHJfdXNhZ2U9IlstcHwtLXByZWZpeCA8c3RyPl0gLS0gLUw8ZGlyPiAtbDxsaWI+IFstTDxkaXI+IC1sPGxpYj4gLi4uXSIKICAgICAgICBhcmdfc3BlYz0iMSsiCiAgICAgICAgb3B0X3NwZWM9InA6IgogICAgICAgIG9wdF9hbGlhcz0icDpwcmVmaXgiCiAgICAgICAgb3B0X3A9IlNMT18iCiAgICAgICAgOzsKICAgIHNjcHAgKQogICAgICAgIHN0cl90b29sPSJzY3BwIgogICAgICAgIHN0cl91c2FnZT0iWy12fC0tdmVyYm9zZV0gWy1wfC0tcHJlc2VydmVdIFstZnwtLWZpbHRlciA8ZmlsdGVyPl0gWy1vfC0tb3V0cHV0IDxvZmlsZT5dIFstdHwtLXRlbXBsYXRlIDx0ZmlsZT5dIFstTXwtLW1hcmsgPG1hcms+XSBbLUR8LS1kZWZpbmUgPGRuYW1lPl0gWy1DfC0tY2xhc3MgPGNuYW1lPl0gPGZpbGU+IFs8ZmlsZT4gLi4uXSIKICAgICAgICBnZW5fdG1wZmlsZT15ZXMKICAgICAgICBhcmdfc3BlYz0iMSsiCiAgICAgICAgb3B0X3NwZWM9InYucC5mK286dDpNOkQ6QzoiCiAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UscDpwcmVzZXJ2ZSxmOmZpbHRlcixvOm91dHB1dCx0OnRlbXBsYXRlLE06bWFyayxEOmRlZmluZSxDOmNsYXNzIgogICAgICAgIG9wdF92PW5vCiAgICAgICAgb3B0X3A9bm8KICAgICAgICBvcHRfZj0iIgogICAgICAgIG9wdF9vPSJsaWIuaCIKICAgICAgICBvcHRfdD0ibGliLmguaW4iCiAgICAgICAgb3B0X009IiUlTUFSSyUlIgogICAgICAgIG9wdF9EPSJjcHAiCiAgICAgICAgb3B0X0M9ImludGVybiIKICAgICAgICA7OwogICAgdmVyc2lvbiApCiAgICAgICAgc3RyX3Rvb2w9InZlcnNpb24iCiAgICAgICAgc3RyX3VzYWdlPSJbLWx8LS1sYW5ndWFnZSA8bGFuZz5dIFstbnwtLW5hbWUgPG5hbWU+XSBbLXB8LS1wcmVmaXggPHByZWZpeD5dIFstc3wtLXNldCA8dmVyc2lvbj5dIFstZXwtLWVkaXRdIFstaXwtLWluY3JlYXNlIDxrbm9iPl0gWy1kfC0tZGlzcGxheSA8dHlwZT5dIDxmaWxlPiIKICAgICAgICBhcmdfc3BlYz0iMT0iCiAgICAgICAgb3B0X3NwZWM9Imw6bjpwOnM6aTplLmQ6IgogICAgICAgIG9wdF9hbGlhcz0ibDpsYW5ndWFnZSxuOm5hbWUscDpwcmVmaXgsczpzZXQsZTplZGl0LGk6aW5jcmVhc2UsZDpkaXNwbGF5IgogICAgICAgIG9wdF9sPSJ0eHQiCiAgICAgICAgb3B0X249InVua25vd24iCiAgICAgICAgb3B0X3A9IiIKICAgICAgICBvcHRfcz0iIgogICAgICAgIG9wdF9lPSJubyIKICAgICAgICBvcHRfaT0iIgogICAgICAgIG9wdF9kPSJzaG9ydCIKICAgICAgICA7OwogICAgcGF0aCApCiAgICAgICAgc3RyX3Rvb2w9InBhdGgiCiAgICAgICAgc3RyX3VzYWdlPSJbLXN8LS1zdXBwcmVzc10gWy1yfC0tcmV2ZXJzZV0gWy1kfC0tZGlybmFtZV0gWy1ifC0tYmFzZW5hbWVdIFstbXwtLW1hZ2ljXSBbLXB8LS1wYXRoIDxwYXRoPl0gPHN0cj4gWzxzdHI+IC4uLl0iCiAgICAgICAgZ2VuX3RtcGZpbGU9eWVzCiAgICAgICAgYXJnX3NwZWM9IjErIgogICAgICAgIG9wdF9zcGVjPSJzLnIuZC5iLm0ucDoiCiAgICAgICAgb3B0X2FsaWFzPSJzOnN1cHByZXNzLHI6cmV2ZXJzZSxkOmRpcm5hbWUsYjpiYXNlbmFtZSxtOm1hZ2ljLHA6cGF0aCIKICAgICAgICBvcHRfcz1ubwogICAgICAgIG9wdF9yPW5vCiAgICAgICAgb3B0X2Q9bm8KICAgICAgICBvcHRfYj1ubwogICAgICAgIG9wdF9tPW5vCiAgICAgICAgb3B0X3A9IiRQQVRIIgogICAgICAgIDs7CiAgICAtKiApCiAgICAgICAgZWNobyAiJDA6RXJyb3I6IHVua25vd24gb3B0aW9uIFxgJHRvb2wnIiAyPiYxCiAgICAgICAgZWNobyAiJDA6SGludDogIHJ1biBcYCQwIC1oJyBmb3IgdXNhZ2UiIDI+JjEKICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgKiApCiAgICAgICAgZWNobyAiJDA6RXJyb3I6IHVua25vd24gY29tbWFuZCBcYCR0b29sJyIgMj4mMQogICAgICAgIGVjaG8gIiQwOkhpbnQ6ICBydW4gXGAkMCAtaCcgZm9yIHVzYWdlIiAyPiYxCiAgICAgICAgZXhpdCAxCiAgICAgICAgOzsKZXNhYwoKIyMKIyMgIENPTU1PTiBVVElMSVRZIENPREUKIyMKCiMgICBjb21tb25seSB1c2VkIEFTQ0lJIHZhbHVlcwpBU0NfVEFCPSIJIgpBU0NfTkw9IgoiCgojICAgZGV0ZXJtaW5lIG5hbWUgb2YgdG9vbAppZiBbICIuJHRvb2wiICE9IC4gXTsgdGhlbgogICAgIyAgIHVzZWQgaW5zaWRlIHNodG9vbCBzY3JpcHQKICAgIHRvb2xjbWQ9IiQwICR0b29sIgogICAgdG9vbGNtZGhlbHA9InNodG9vbCAkdG9vbCIKICAgIG1zZ3ByZWZpeD0ic2h0b29sOiR0b29sIgplbHNlCiAgICAjICAgdXNlZCBhcyBzdGFuZGFsb25lIHNjcmlwdAogICAgdG9vbGNtZD0iJDAiCiAgICB0b29sY21kaGVscD0ic2ggJDAiCiAgICBtc2dwcmVmaXg9IiRzdHJfdG9vbCIKZmkKCiMgICBwYXJzZSBhcmd1bWVudCBzcGVjaWZpY2F0aW9uIHN0cmluZwpldmFsIGBlY2hvICRhcmdfc3BlYyB8XAogICAgICBzZWQgLWUgJ3MvXlwoWzAtOV0qXClcKFsrPV1cKS9hcmdfTlVNUz1cMTsgYXJnX01PREU9XDIvJ2AKCiMgICBwYXJzZSBvcHRpb24gc3BlY2lmaWNhdGlvbiBzdHJpbmcKZXZhbCBgZWNobyBoLiRvcHRfc3BlYyB8XAogICAgICBzZWQgLWUgJ3MvXChbYS16QS1aMC05XVwpXChbLjorXVwpL29wdF9NT0RFX1wxPVwyOy9nJ2AKCiMgICBwYXJzZSBvcHRpb24gYWxpYXMgc3RyaW5nCmV2YWwgYGVjaG8gaDpoZWxwLCRvcHRfYWxpYXMgfFwKICAgICAgc2VkIC1lICdzLy0vXy9nJyAtZSAncy9cKFthLXpBLVowLTldXCk6XChbXixdKlwpLCovb3B0X0FMSUFTX1wyPVwxOy9nJ2AKCiMgICBpbnRlcmF0ZSBvdmVyIGFyZ3VtZW50IGxpbmUKb3B0X1BSRVY9JycKd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbwogICAgIyAgIHNwZWNpYWwgb3B0aW9uIHN0b3BzIHByb2Nlc3NpbmcKICAgIGlmIFsgIi4kMSIgPSAiLi0tIiBdOyB0aGVuCiAgICAgICAgc2hpZnQKICAgICAgICBicmVhawogICAgZmkKCiAgICAjICAgZGV0ZXJtaW5lIG9wdGlvbiBhbmQgYXJndW1lbnQKICAgIG9wdF9BUkdfT0s9bm8KICAgIGlmIFsgIi4kb3B0X1BSRVYiICE9IC4gXTsgdGhlbgogICAgICAgICMgICBtZXJnZSBwcmV2aW91cyBzZWVuIG9wdGlvbiB3aXRoIGFyZ3VtZW50CiAgICAgICAgb3B0X09QVD0iJG9wdF9QUkVWIgogICAgICAgIG9wdF9BUkc9IiQxIgogICAgICAgIG9wdF9BUkdfT0s9eWVzCiAgICAgICAgb3B0X1BSRVY9JycKICAgIGVsc2UKICAgICAgICAjICAgc3BsaXQgYXJndW1lbnQgaW50byBvcHRpb24gYW5kIGFyZ3VtZW50CiAgICAgICAgY2FzZSAiJDEiIGluCiAgICAgICAgICAgIC0tW2EtekEtWjAtOV0qPSopCiAgICAgICAgICAgICAgICBldmFsIGBlY2hvICJ4JDEiIHxcCiAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvXngtLVwoW2EtekEtWjAtOS1dKlwpPVwoLipcKSQvb3B0X09QVD0iXDEiO29wdF9BUkc9IlwyIi8nYAogICAgICAgICAgICAgICAgb3B0X1NUUj1gZWNobyAkb3B0X09QVCB8IHNlZCAtZSAncy8tL18vZydgCiAgICAgICAgICAgICAgICBldmFsICJvcHRfT1BUPVwke29wdF9BTElBU18ke29wdF9TVFJ9LSR7b3B0X09QVH19IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgLS1bYS16QS1aMC05XSopCiAgICAgICAgICAgICAgICBvcHRfT1BUPWBlY2hvICJ4JDEiIHwgY3V0IC1jNC1gCiAgICAgICAgICAgICAgICBvcHRfU1RSPWBlY2hvICRvcHRfT1BUIHwgc2VkIC1lICdzLy0vXy9nJ2AKICAgICAgICAgICAgICAgIGV2YWwgIm9wdF9PUFQ9XCR7b3B0X0FMSUFTXyR7b3B0X1NUUn0tJHtvcHRfT1BUfX0iCiAgICAgICAgICAgICAgICBvcHRfQVJHPScnCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAtW2EtekEtWjAtOV0qKQogICAgICAgICAgICAgICAgZXZhbCBgZWNobyAieCQxIiB8XAogICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL154LVwoW2EtekEtWjAtOV1cKS9vcHRfT1BUPSJcMSI7LycgXAogICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLyI7XCguKlwpJC8iOyBvcHRfQVJHPSJcMSIvJ2AKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIC1bYS16QS1aMC05XSkKICAgICAgICAgICAgICAgIG9wdF9PUFQ9YGVjaG8gIngkMSIgfCBjdXQgLWMzLWAKICAgICAgICAgICAgICAgIG9wdF9BUkc9JycKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICBmaQoKICAgICMgICBlYXQgdXAgb3B0aW9uCiAgICBzaGlmdAoKICAgICMgICBkZXRlcm1pbmUgd2hldGhlciBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQKICAgIGV2YWwgIm9wdF9NT0RFPVwkb3B0X01PREVfJHtvcHRfT1BUfSIKICAgIGlmIFsgIi4kb3B0X0FSRyIgPSAuIF0gJiYgWyAiLiRvcHRfQVJHX09LIiAhPSAueWVzIF07IHRoZW4KICAgICAgICBpZiBbICIuJG9wdF9NT0RFIiA9ICIuOiIgXSB8fCBbICIuJG9wdF9NT0RFIiA9ICIuKyIgXTsgdGhlbgogICAgICAgICAgICBvcHRfUFJFVj0iJG9wdF9PUFQiCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgIGZpCgogICAgIyAgIHByb2Nlc3Mgb3B0aW9uCiAgICBjYXNlICRvcHRfTU9ERSBpbgogICAgICAgICcuJyApCiAgICAgICAgICAgICMgICBib29sZWFuIG9wdGlvbgogICAgICAgICAgICBldmFsICJvcHRfJHtvcHRfT1BUfT15ZXMiCiAgICAgICAgICAgIDs7CiAgICAgICAgJzonICkKICAgICAgICAgICAgIyAgIG9wdGlvbiB3aXRoIGFyZ3VtZW50IChtdWx0aXBsZSBvY2N1cmFuY2VzIG92ZXJyaWRlKQogICAgICAgICAgICBldmFsICJvcHRfJHtvcHRfT1BUfT1cIlwkb3B0X0FSR1wiIgogICAgICAgICAgICA7OwogICAgICAgICcrJyApCiAgICAgICAgICAgICMgICBvcHRpb24gd2l0aCBhcmd1bWVudCAobXVsdGlwbGUgb2NjdXJhbmNlcyBhcHBlbmQpCiAgICAgICAgICAgIGV2YWwgIm9wdF8ke29wdF9PUFR9PVwiXCRvcHRfJHtvcHRfT1BUfVwke0FTQ19OTH1cJG9wdF9BUkdcIiIKICAgICAgICAgICAgOzsKICAgICAgICAqICkKICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogdW5rbm93biBvcHRpb246IFxgJG9wdF9PUFQnIiAxPiYyCiAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6SGludDogIHJ1biBcYCR0b29sY21kaGVscCAtaCcgb3IgXGBtYW4gc2h0b29sJyBmb3IgZGV0YWlscyIgMT4mMgogICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgOzsKICAgIGVzYWMKZG9uZQppZiBbICIuJG9wdF9QUkVWIiAhPSAuIF07IHRoZW4KICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gb3B0aW9uIFxgJG9wdF9QUkVWJyIgMT4mMgogICAgZWNobyAiJG1zZ3ByZWZpeDpIaW50OiAgcnVuIFxgJHRvb2xjbWRoZWxwIC1oJyBvciBcYG1hbiBzaHRvb2wnIGZvciBkZXRhaWxzIiAxPiYyCiAgICBleGl0IDEKZmkKCiMgICBwcm9jZXNzIGhlbHAgb3B0aW9uCmlmIFsgIi4kb3B0X2giID0gLnllcyBdOyB0aGVuCiAgICBlY2hvICJVc2FnZTogJHRvb2xjbWRoZWxwICRzdHJfdXNhZ2UiCiAgICBleGl0IDAKZmkKCiMgICBjb21wbGFpbiBhYm91dCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwpjYXNlICRhcmdfTU9ERSBpbgogICAgJz0nICkKICAgICAgICBpZiBbICQjIC1uZSAkYXJnX05VTVMgXTsgdGhlbgogICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKGV4YWN0bHkgJGFyZ19OVU1TIGV4cGVjdGVkKSIgMT4mMgogICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkhpbnQ6ICBydW4gXGAkdG9vbGNtZCAtaCcgb3IgXGBtYW4gc2h0b29sJyBmb3IgZGV0YWlscyIgMT4mMgogICAgICAgICAgICBleGl0IDEKICAgICAgICBmaQogICAgICAgIDs7CiAgICAnKycgKQogICAgICAgIGlmIFsgJCMgLWx0ICRhcmdfTlVNUyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoYXQgbGVhc3QgJGFyZ19OVU1TIGV4cGVjdGVkKSIgMT4mMgogICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkhpbnQ6ICBydW4gXGAkdG9vbGNtZCAtaCcgb3IgXGBtYW4gc2h0b29sJyBmb3IgZGV0YWlscyIgMT4mMgogICAgICAgICAgICBleGl0IDEKICAgICAgICBmaQogICAgICAgIDs7CmVzYWMKCiMgICBlc3RhYmxpc2ggYSB0ZW1wb3JhcnkgZmlsZSBvbiByZXF1ZXN0CmlmIFsgIi4kZ2VuX3RtcGZpbGUiID0gLnllcyBdOyB0aGVuCiAgICAjICAgY3JlYXRlIChleHBsaWNpdGx5KSBzZWN1cmUgdGVtcG9yYXJ5IGRpcmVjdG9yeQogICAgaWYgWyAiLiRUTVBESVIiICE9IC4gXTsgdGhlbgogICAgICAgIHRtcGRpcj0iJFRNUERJUiIKICAgIGVsaWYgWyAiLiRURU1QRElSIiAhPSAuIF07IHRoZW4KICAgICAgICB0bXBkaXI9IiRURU1QRElSIgogICAgZWxzZQogICAgICAgIHRtcGRpcj0iL3RtcCIKICAgIGZpCiAgICB0bXBkaXI9IiR0bXBkaXIvLnNodG9vbC4kJCIKICAgICggdW1hc2sgMDc3CiAgICAgIHJtIC1yZiAiJHRtcGRpciIgPi9kZXYvbnVsbCAyPiYxIHx8IHRydWUKICAgICAgbWtkaXIgICIkdG1wZGlyIiA+L2Rldi9udWxsIDI+JjEKICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBmYWlsZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkdG1wZGlyJyIgMT4mMgogICAgICAgICAgZXhpdCAxCiAgICAgIGZpCiAgICApCgogICAgIyAgIGNyZWF0ZSAoaW1wbGljaXRseSkgc2VjdXJlIHRlbXBvcmFyeSBmaWxlCiAgICB0bXBmaWxlPSIkdG1wZGlyL3NodG9vbC50bXAiCiAgICB0b3VjaCAiJHRtcGZpbGUiCmZpCgojICAgdXRpbGl0eSBmdW5jdGlvbjogbWFwIHN0cmluZyB0byBsb3dlciBjYXNlCnV0aWxfbG93ZXIgKCkgewogICAgZWNobyAiJDEiIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCn0KCiMgICB1dGlsaXR5IGZ1bmN0aW9uOiBtYXAgc3RyaW5nIHRvIHVwcGVyIGNhc2UKdXRpbF91cHBlciAoKSB7CiAgICBlY2hvICIkMSIgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKfQoKIyAgIGNsZWFudXAgcHJvY2VkdXJlCnNodG9vbF9leGl0ICgpIHsKICAgIHJjPSIkMSIKICAgIGlmIFsgIi4kZ2VuX3RtcGZpbGUiID0gLnllcyBdOyB0aGVuCiAgICAgICAgcm0gLXJmICIkdG1wZGlyIiA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQogICAgZmkKICAgIGV4aXQgJHJjCn0KCiMjCiMjICBESVNQQVRDSCBJTlRPIFNDUklQVCBCT0RZCiMjCgpjYXNlICR0b29sIGluCgplY2hvICkKICAgICMjCiAgICAjIyAgZWNobyAtLSBQcmludCBzdHJpbmcgd2l0aCBvcHRpb25hbCBjb25zdHJ1Y3QgZXhwYW5zaW9uCiAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KICAgICMjCgogICAgdGV4dD0iJCoiCgogICAgIyAgIGNoZWNrIGZvciBicm9rZW4gZXNjYXBlIHNlcXVlbmNlIGV4cGFuc2lvbgogICAgc2VvPScnCiAgICBieXRlcz1gZWNobyAnXDEnIHwgd2MgLWMgfCBhd2sgJ3sgcHJpbnRmKCIlcyIsICQxKTsgfSdgCiAgICBpZiBbICIuJGJ5dGVzIiAhPSAuMyBdOyB0aGVuCiAgICAgICAgYnl0ZXM9YGVjaG8gLUUgJ1wxJyB8IHdjIC1jIHwgYXdrICd7IHByaW50ZigiJXMiLCAkMSk7IH0nYAogICAgICAgIGlmIFsgIi4kYnl0ZXMiID0gLjMgXTsgdGhlbgogICAgICAgICAgICBzZW89Jy1FJwogICAgICAgIGZpCiAgICBmaQoKICAgICMgICBjaGVjayBmb3IgZXhpc3RpbmcgLW4gb3B0aW9uICh0byBzdXBwcmVzcyBuZXdsaW5lKQogICAgbWludXNuPScnCiAgICBieXRlcz1gZWNobyAtbiAxMjMgMj4vZGV2L251bGwgfCB3YyAtYyB8IGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AKICAgIGlmIFsgIi4kYnl0ZXMiID0gLjMgXTsgdGhlbgogICAgICAgIG1pbnVzbj0nLW4nCiAgICBmaQoKICAgICMgICBkZXRlcm1pbmUgdGVybWluYWwgYm9sZCBzZXF1ZW5jZQogICAgdGVybV9ib2xkPScnCiAgICB0ZXJtX25vcm09JycKICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdICYmIFsgIi5gZWNobyAkdGV4dCB8IGdyZXAgJyVbQmJdJ2AiICE9IC4gXTsgdGhlbgogICAgICAgIGNhc2UgJFRFUk0gaW4KICAgICAgICAgICAgIyAgIGZvciB0aGUgbW9zdCBpbXBvcnRhbnQgdGVybWluYWwgdHlwZXMgd2UgZGlyZWN0bHkga25vdyB0aGUgc2VxdWVuY2VzCiAgICAgICAgICAgIHh0ZXJtfHh0ZXJtKnx2dDIyMHx2dDIyMCopCiAgICAgICAgICAgICAgICB0ZXJtX2JvbGQ9YGF3ayAnQkVHSU4geyBwcmludGYoIiVjJWMlYyVjIiwgMjcsIDkxLCA0OSwgMTA5KTsgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKICAgICAgICAgICAgICAgIHRlcm1fbm9ybT1gYXdrICdCRUdJTiB7IHByaW50ZigiJWMlYyVjIiwgMjcsIDkxLCAxMDkpOyB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgdnQxMDB8dnQxMDAqfGN5Z3dpbikKICAgICAgICAgICAgICAgIHRlcm1fYm9sZD1gYXdrICdCRUdJTiB7IHByaW50ZigiJWMlYyVjJWMlYyVjIiwgMjcsIDkxLCA0OSwgMTA5LCAwLCAwKTsgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKICAgICAgICAgICAgICAgIHRlcm1fbm9ybT1gYXdrICdCRUdJTiB7IHByaW50ZigiJWMlYyVjJWMlYyIsIDI3LCA5MSwgMTA5LCAwLCAwKTsgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICMgICBmb3IgYWxsIG90aGVycywgd2UgdHJ5IHRvIHVzZSBhIHBvc3NpYmx5IGV4aXN0aW5nIGB0cHV0JyBvciBgdGNvdXQnIHV0aWxpdHkKICAgICAgICAgICAgKiApCiAgICAgICAgICAgICAgICBwYXRocz1gZWNobyAkUEFUSCB8IHNlZCAtZSAncy86LyAvZydgCiAgICAgICAgICAgICAgICBmb3IgdG9vbCBpbiB0cHV0IHRjb3V0OyBkbwogICAgICAgICAgICAgICAgICAgIGZvciBkaXIgaW4gJHBhdGhzOyBkbwogICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1yICIkZGlyLyR0b29sIiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc2VxIGluIGJvbGQgbWQgc21zbzsgZG8gIyAnc21zbycgaXMgbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbGQ9ImAkZGlyLyR0b29sICRzZXEgMj4vZGV2L251bGxgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kYm9sZCIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1fYm9sZD0iJGJvbGQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kdGVybV9ib2xkIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc2VxIGluIHNncjAgbWUgcm1zbyBpbml0IHJlc2V0OyBkbyAjICdyZXNldCcgaXMgbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtPSJgJGRpci8kdG9vbCAkc2VxIDI+L2Rldi9udWxsYCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRub3JtIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1fbm9ybT0iJG5vcm0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJHRlcm1fYm9sZCIgIT0gLiBdICYmIFsgIi4kdGVybV9ub3JtIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgICAgIGlmIFsgIi4kdGVybV9ib2xkIiA9IC4gXSB8fCBbICIuJHRlcm1fbm9ybSIgPSAuIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiB1bmFibGUgdG8gZGV0ZXJtaW5lIHRlcm1pbmFsIHNlcXVlbmNlIGZvciBib2xkIG1vZGUiIDE+JjIKICAgICAgICAgICAgdGVybV9ib2xkPScnCiAgICAgICAgICAgIHRlcm1fbm9ybT0nJwogICAgICAgIGZpCiAgICBmaQoKICAgICMgICBkZXRlcm1pbmUgdXNlciBuYW1lCiAgICB1c2VybmFtZT0nJwogICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF0gJiYgWyAiLmBlY2hvICR0ZXh0IHwgZ3JlcCAnJVt1VWdHXSdgIiAhPSAuIF07IHRoZW4KICAgICAgICB1c2VybmFtZT0iYChpZCAtdW4pIDI+L2Rldi9udWxsYCIKICAgICAgICBpZiBbICIuJHVzZXJuYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICBzdHI9ImAoaWQpIDI+L2Rldi9udWxsYCIKICAgICAgICAgICAgaWYgWyAiLmBlY2hvICRzdHIgfCBncmVwICdedWlkWyAJXSo9WyAJXSpbMC05XSooJ2AiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgdXNlcm5hbWU9YGVjaG8gJHN0ciB8IHNlZCAtZSAncy9edWlkWyAJXSo9WyAJXSpbMC05XSooLy8nIC1lICdzLykuKiQvLydgCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGlmIFsgIi4kdXNlcm5hbWUiID0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICB1c2VybmFtZT0iJExPR05BTUUiCiAgICAgICAgICAgICAgICBpZiBbICIuJHVzZXJuYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPSIkVVNFUiIKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJHVzZXJuYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZT0iYCh3aG9hbWkpIDI+L2Rldi9udWxsIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdrICd7IHByaW50ZigiJXMiLCAkMSk7IH0nYCIKICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiR1c2VybmFtZSIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPSJgKHdobyBhbSBpKSAyPi9kZXYvbnVsbCB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2sgJ3sgcHJpbnRmKCIlcyIsICQxKTsgfSdgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiR1c2VybmFtZSIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZT0ndW5rbm93bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKICAgIGZpCgogICAgIyAgIGRldGVybWluZSB1c2VyIGlkCiAgICB1c2VyaWQ9JycKICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdICYmIFsgIi5gZWNobyAkdGV4dCB8IGdyZXAgJyVVJ2AiICE9IC4gXTsgdGhlbgogICAgICAgIHVzZXJpZD0iYChpZCAtdSkgMj4vZGV2L251bGxgIgogICAgICAgIGlmIFsgIi4kdXNlcmlkIiA9IC4gXTsgdGhlbgogICAgICAgICAgICB1c2VyaWQ9ImAoaWQgLXUgJHt1c2VybmFtZX0pIDI+L2Rldi9udWxsYCIKICAgICAgICAgICAgaWYgWyAiLiR1c2VyaWQiID0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICBzdHI9ImAoaWQpIDI+L2Rldi9udWxsYCIKICAgICAgICAgICAgICAgIGlmIFsgIi5gZWNobyAkc3RyIHwgZ3JlcCAnXnVpZFsgCV0qPVsgCV0qWzAtOV0qKCdgIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICB1c2VyaWQ9YGVjaG8gJHN0ciB8IHNlZCAtZSAncy9edWlkWyAJXSo9WyAJXSovLycgLWUgJ3MvKC4qJC8vJ2AKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBpZiBbICIuJHVzZXJpZCIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICB1c2VyaWQ9YChnZXRlbnQgcGFzc3dkICR7dXNlcm5hbWV9KSAyPi9kZXYvbnVsbCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9bXjpdKjpbXjpdKjovLycgLWUgJ3MvOi4qJC8vJ2AKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJHVzZXJpZCIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlkPWBncmVwICJeJHt1c2VybmFtZX06IiAvZXRjL3Bhc3N3ZCAyPi9kZXYvbnVsbCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvW146XSo6W146XSo6Ly8nIC1lICdzLzouKiQvLydgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kdXNlcmlkIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlkPWAoeXBjYXQgcGFzc3dkKSAyPi9kZXYvbnVsbCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAgIl4ke3VzZXJuYW1lfToiIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvW146XSo6W146XSo6Ly8nIC1lICdzLzouKiQvLydgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJHVzZXJpZCIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQ9Jz8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmaQogICAgICAgIGZpCiAgICBmaQoKICAgICMgICBkZXRlcm1pbmUgKHByaW1hcnkpIGdyb3VwIGlkCiAgICBncm91cGlkPScnCiAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXSAmJiBbICIuYGVjaG8gJHRleHQgfCBncmVwICclW2dHXSdgIiAhPSAuIF07IHRoZW4KICAgICAgICBncm91cGlkPSJgKGlkIC1nICR7dXNlcm5hbWV9KSAyPi9kZXYvbnVsbGAiCiAgICAgICAgaWYgWyAiLiRncm91cGlkIiA9IC4gXTsgdGhlbgogICAgICAgICAgICBzdHI9ImAoaWQpIDI+L2Rldi9udWxsYCIKICAgICAgICAgICAgaWYgWyAiLmBlY2hvICRzdHIgfCBncmVwICdnaWRbIAldKj1bIAldKlswLTldKignYCIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICBncm91cGlkPWBlY2hvICRzdHIgfCBzZWQgLWUgJ3MvXi4qZ2lkWyAJXSo9WyAJXSovLycgLWUgJ3MvKC4qJC8vJ2AKICAgICAgICAgICAgZmkKICAgICAgICAgICAgaWYgWyAiLiRncm91cGlkIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgZ3JvdXBpZD1gKGdldGVudCBwYXNzd2QgJHt1c2VybmFtZX0pIDI+L2Rldi9udWxsIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL1teOl0qOlteOl0qOlteOl0qOi8vJyAtZSAncy86LiokLy8nYAogICAgICAgICAgICAgICAgaWYgWyAiLiRncm91cGlkIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGdyb3VwaWQ9YGdyZXAgIl4ke3VzZXJuYW1lfToiIC9ldGMvcGFzc3dkIDI+L2Rldi9udWxsIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9bXjpdKjpbXjpdKjpbXjpdKjovLycgLWUgJ3MvOi4qJC8vJ2AKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJGdyb3VwaWQiID0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaWQ9YCh5cGNhdCBwYXNzd2QpIDI+L2Rldi9udWxsIHwgZ3JlcCAiXiR7dXNlcm5hbWV9OiIgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9bXjpdKjpbXjpdKjpbXjpdKjovLycgLWUgJ3MvOi4qJC8vJ2AKICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRncm91cGlkIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpZD0nPycKICAgICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgZmkKICAgICAgICBmaQogICAgZmkKCiAgICAjICAgZGV0ZXJtaW5lIChwcmltYXJ5KSBncm91cCBuYW1lCiAgICBncm91cG5hbWU9JycKICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdICYmIFsgIi5gZWNobyAkdGV4dCB8IGdyZXAgJyVnJ2AiICE9IC4gXTsgdGhlbgogICAgICAgIGdyb3VwbmFtZT0iYChpZCAtZ24gJHt1c2VybmFtZX0pIDI+L2Rldi9udWxsYCIKICAgICAgICBpZiBbICIuJGdyb3VwbmFtZSIgPSAuIF07IHRoZW4KICAgICAgICAgICAgc3RyPSJgKGlkKSAyPi9kZXYvbnVsbGAiCiAgICAgICAgICAgIGlmIFsgIi5gZWNobyAkc3RyIHwgZ3JlcCAnZ2lkWyAJXSo9WyAJXSpbMC05XSooJ2AiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgZ3JvdXBuYW1lPWBlY2hvICRzdHIgfCBzZWQgLWUgJ3MvXi4qZ2lkWyAJXSo9WyAJXSpbMC05XSooLy8nIC1lICdzLykuKiQvLydgCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGlmIFsgIi4kZ3JvdXBuYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgZ3JvdXBuYW1lPWAoZ2V0ZW50IGdyb3VwKSAyPi9kZXYvbnVsbCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcCAiXlteOl0qOlteOl0qOiR7Z3JvdXBpZH06IiB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzLzouKiQvLydgCiAgICAgICAgICAgICAgICBpZiBbICIuJGdyb3VwbmFtZSIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBncm91cG5hbWU9YGdyZXAgIl5bXjpdKjpbXjpdKjoke2dyb3VwaWR9OiIgL2V0Yy9ncm91cCAyPi9kZXYvbnVsbCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy86LiokLy8nYAogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kZ3JvdXBuYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBncm91cG5hbWU9YCh5cGNhdCBncm91cCkgMj4vZGV2L251bGwgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcCAiXlteOl0qOlteOl0qOiR7Z3JvdXBpZH06IiB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvOi4qJC8vJ2AKICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRncm91cG5hbWUiID0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cG5hbWU9Jz8nCiAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKICAgIGZpCgogICAgIyAgIGRldGVybWluZSBob3N0IGFuZCBkb21haW4gbmFtZQogICAgaG9zdG5hbWU9JycKICAgIGRvbWFpbm5hbWU9JycKICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdICYmIFsgIi5gZWNobyAkdGV4dCB8IGdyZXAgJyVoJ2AiICE9IC4gXTsgdGhlbgogICAgICAgIGhvc3RuYW1lPSJgKHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8XAogICAgICAgICAgICAgICAgICAgYXdrICd7IHByaW50ZigiJXMiLCAkMSk7IH0nYCIKICAgICAgICBpZiBbICIuJGhvc3RuYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICBob3N0bmFtZT0iYChob3N0bmFtZSkgMj4vZGV2L251bGwgfFwKICAgICAgICAgICAgICAgICAgICAgICBhd2sgJ3sgcHJpbnRmKCIlcyIsICQxKTsgfSdgIgogICAgICAgICAgICBpZiBbICIuJGhvc3RuYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgaG9zdG5hbWU9J3Vua25vd24nCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKICAgICAgICBjYXNlICRob3N0bmFtZSBpbgogICAgICAgICAgICAqLiogKQogICAgICAgICAgICAgICAgZG9tYWlubmFtZT0iLmBlY2hvICRob3N0bmFtZSB8IGN1dCAtZC4gLWYyLWAiCiAgICAgICAgICAgICAgICBob3N0bmFtZT0iYGVjaG8gJGhvc3RuYW1lIHwgY3V0IC1kLiAtZjFgIgogICAgICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICBmaQogICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF0gJiYgWyAiLmBlY2hvICR0ZXh0IHwgZ3JlcCAnJWQnYCIgIT0gLiBdOyB0aGVuCiAgICAgICAgaWYgWyAiLiRkb21haW5uYW1lIiA9IC4gXTsgdGhlbgogICAgICAgICAgICBpZiBbIC1mIC9ldGMvcmVzb2x2LmNvbmYgXTsgdGhlbgogICAgICAgICAgICAgICAgZG9tYWlubmFtZT0iYGdyZXAgJ15bIAldKmRvbWFpbicgL2V0Yy9yZXNvbHYuY29uZiB8IHNlZCAtZSAncScgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvLipkb21haW4vLycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eWyAJXSovLycgLWUgJ3MvXiAqLy8nIC1lICdzL14JKi8vJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL15cLi8vJyAtZSAncy9eLy4vJyB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AiCiAgICAgICAgICAgICAgICBpZiBbICIuJGRvbWFpbm5hbWUiID0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZG9tYWlubmFtZT0iYGdyZXAgJ15bIAldKnNlYXJjaCcgL2V0Yy9yZXNvbHYuY29uZiB8IHNlZCAtZSAncScgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzLy4qc2VhcmNoLy8nIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL15bIAldKi8vJyAtZSAncy9eICovLycgLWUgJ3MvXgkqLy8nIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLyAuKi8vJyAtZSAncy8JLiovLycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvXlwuLy8nIC1lICdzL14vLi8nIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AiCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmaQogICAgICAgIGZpCiAgICBmaQoKICAgICMgICBkZXRlcm1pbmUgY3VycmVudCB0aW1lCiAgICB0aW1lX2RheT0nJwogICAgdGltZV9tb250aD0nJwogICAgdGltZV95ZWFyPScnCiAgICB0aW1lX21vbnRobmFtZT0nJwogICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF0gJiYgWyAiLmBlY2hvICR0ZXh0IHwgZ3JlcCAnJVtETVltXSdgIiAhPSAuIF07IHRoZW4KICAgICAgICB0aW1lX2RheT1gZGF0ZSAnKyVkJ2AKICAgICAgICB0aW1lX21vbnRoPWBkYXRlICcrJW0nYAogICAgICAgIHRpbWVfeWVhcj1gZGF0ZSAnKyVZJyAyPi9kZXYvbnVsbGAKICAgICAgICBpZiBbICIuJHRpbWVfeWVhciIgPSAuIF07IHRoZW4KICAgICAgICAgICAgdGltZV95ZWFyPWBkYXRlICcrJXknYAogICAgICAgICAgICBjYXNlICR0aW1lX3llYXIgaW4KICAgICAgICAgICAgICAgIFs1LTldWzAtOV0pIHRpbWVfeWVhcj0iMTkkdGltZV95ZWFyIiA7OwogICAgICAgICAgICAgICAgWzAtNF1bMC05XSkgdGltZV95ZWFyPSIyMCR0aW1lX3llYXIiIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICBmaQogICAgICAgIGNhc2UgJHRpbWVfbW9udGggaW4KICAgICAgICAgICAgMXwwMSkgdGltZV9tb250aG5hbWU9J0phbicgOzsKICAgICAgICAgICAgMnwwMikgdGltZV9tb250aG5hbWU9J0ZlYicgOzsKICAgICAgICAgICAgM3wwMykgdGltZV9tb250aG5hbWU9J01hcicgOzsKICAgICAgICAgICAgNHwwNCkgdGltZV9tb250aG5hbWU9J0FwcicgOzsKICAgICAgICAgICAgNXwwNSkgdGltZV9tb250aG5hbWU9J01heScgOzsKICAgICAgICAgICAgNnwwNikgdGltZV9tb250aG5hbWU9J0p1bicgOzsKICAgICAgICAgICAgN3wwNykgdGltZV9tb250aG5hbWU9J0p1bCcgOzsKICAgICAgICAgICAgOHwwOCkgdGltZV9tb250aG5hbWU9J0F1ZycgOzsKICAgICAgICAgICAgOXwwOSkgdGltZV9tb250aG5hbWU9J1NlcCcgOzsKICAgICAgICAgICAgICAxMCkgdGltZV9tb250aG5hbWU9J09jdCcgOzsKICAgICAgICAgICAgICAxMSkgdGltZV9tb250aG5hbWU9J05vdicgOzsKICAgICAgICAgICAgICAxMikgdGltZV9tb250aG5hbWU9J0RlYycgOzsKICAgICAgICBlc2FjCiAgICBmaQoKICAgICMgICBleHBhbmQgc3BlY2lhbCBgYCV4JycgY29uc3RydWN0cwogICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF07IHRoZW4KICAgICAgICB0ZXh0PWBlY2hvICRzZW8gIiR0ZXh0IiB8XAogICAgICAgICAgICAgIHNlZCAtZSAicy8lQi8ke3Rlcm1fYm9sZH0vZyIgXAogICAgICAgICAgICAgICAgICAtZSAicy8lYi8ke3Rlcm1fbm9ybX0vZyIgXAogICAgICAgICAgICAgICAgICAtZSAicy8ldS8ke3VzZXJuYW1lfS9nIiBcCiAgICAgICAgICAgICAgICAgIC1lICJzLyVVLyR7dXNlcmlkfS9nIiBcCiAgICAgICAgICAgICAgICAgIC1lICJzLyVnLyR7Z3JvdXBuYW1lfS9nIiBcCiAgICAgICAgICAgICAgICAgIC1lICJzLyVHLyR7Z3JvdXBpZH0vZyIgXAogICAgICAgICAgICAgICAgICAtZSAicy8laC8ke2hvc3RuYW1lfS9nIiBcCiAgICAgICAgICAgICAgICAgIC1lICJzLyVkLyR7ZG9tYWlubmFtZX0vZyIgXAogICAgICAgICAgICAgICAgICAtZSAicy8lRC8ke3RpbWVfZGF5fS9nIiBcCiAgICAgICAgICAgICAgICAgIC1lICJzLyVNLyR7dGltZV9tb250aH0vZyIgXAogICAgICAgICAgICAgICAgICAtZSAicy8lWS8ke3RpbWVfeWVhcn0vZyIgXAogICAgICAgICAgICAgICAgICAtZSAicy8lbS8ke3RpbWVfbW9udGhuYW1lfS9nIiAyPi9kZXYvbnVsbGAKICAgIGZpCgogICAgIyAgIGNyZWF0ZSBvdXRwdXQKICAgIGlmIFsgLiRvcHRfbiA9IC5ubyBdOyB0aGVuCiAgICAgICAgZWNobyAkc2VvICIkdGV4dCIKICAgIGVsc2UKICAgICAgICAjICAgdGhlIGhhcmRlciBwYXJ0OiBlY2hvIC1uIGlzIGJlc3QsIGJlY2F1c2UKICAgICAgICAjICAgYXdrIG1heSBjb21wbGFpbiBhYm91dCBzb21lIFx4eCBzZXF1ZW5jZXMuCiAgICAgICAgaWYgWyAiLiRtaW51c24iICE9IC4gXTsgdGhlbgogICAgICAgICAgICBlY2hvICRzZW8gJG1pbnVzbiAiJHRleHQiCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIGR1bW15IHwgYXdrICd7IHByaW50ZigiJXMiLCBURVhUKTsgfScgVEVYVD0iJHRleHQiCiAgICAgICAgZmkKICAgIGZpCgogICAgc2h0b29sX2V4aXQgMAogICAgOzsKCm1kYXRlICkKICAgICMjCiAgICAjIyAgbWRhdGUgLS0gUHJldHR5LXByaW50IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSBvciBkaXIKICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgogICAgIyMKCiAgICBmb2Q9IiQxIgogICAgY2FzZSAiJG9wdF9vIiBpbgogICAgICAgIFtkbXldW2RteV1bZG15XSApCiAgICAgICAgICAgIDs7CiAgICAgICAgKiApIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgYXJndW1lbnQgdG8gb3B0aW9uIFxgLW8nOiAkb3B0X28iIDE+JjIKICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgICAgICA7OwogICAgZXNhYwogICAgaWYgWyAhIC1yICIkZm9kIiBdOyB0aGVuCiAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogZmlsZSBvciBkaXJlY3Rvcnkgbm90IGZvdW5kOiAkZm9kIiAxPiYyCiAgICAgICAgc2h0b29sX2V4aXQgMQogICAgZmkKCiAgICAjICAgR05VIGxzIGNoYW5nZXMgaXRzIHRpbWUgZm9ybWF0IGluIHJlc3BvbnNlIHRvIHRoZSBUSU1FX1NUWUxFCiAgICAjICAgdmFyaWFibGUuIFNpbmNlIHdlIGNhbm5vdCBhc3N1bWUgInVuc2V0IiB3b3JrcywgcmV2ZXJ0IHRoaXMKICAgICMgICB2YXJpYWJsZSB0byBpdHMgZG9jdW1lbnRlZCBkZWZhdWx0LgogICAgaWYgWyAiLiRUSU1FX1NUWUxFIiAhPSAuIF07IHRoZW4KICAgICAgICBUSU1FX1NUWUxFPXBvc2l4LWxvbmctaXNvCiAgICAgICAgZXhwb3J0IFRJTUVfU1RZTEUKICAgIGZpCgogICAgIyAgIGdldCB0aGUgZXh0ZW5kZWQgbHMgb3V0cHV0IG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeS4KICAgIGlmIC9iaW4vbHMgLUwgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgIHNldCAtIHhgL2Jpbi9scyAtTCAtbCAtZCAkZm9kYAogICAgZWxzZQogICAgICAgIHNldCAtIHhgL2Jpbi9scyAtbCAtZCAkZm9kYAogICAgZmkKCiAgICAjICAgVGhlIG1vbnRoIGlzIGF0IGxlYXN0IHRoZSBmb3VydGggYXJndW1lbnQKICAgICMgICAoMyBzaGlmdHMgaGVyZSwgdGhlIG5leHQgaW5zaWRlIHRoZSBsb29wKS4KICAgIHNoaWZ0OyBzaGlmdDsgc2hpZnQKCiAgICAjICAgRmluZCB0aGUgbW9udGguIE5leHQgYXJndW1lbnQgaXMgZGF5LCBmb2xsb3dlZCBieSB0aGUgeWVhciBvciB0aW1lLgogICAgbW9udGg9IiIKICAgIHdoaWxlIFsgIi4kbW9udGgiID0gLiBdOyBkbwogICAgICAgIHNoaWZ0CiAgICAgICAgY2FzZSAkMSBpbgogICAgICAgICAgICBKYW4pIG1vbnRoPUphbnVhcnk7ICAgbnVtbW9udGg9MSAgOzsKICAgICAgICAgICAgRmViKSBtb250aD1GZWJydWFyeTsgIG51bW1vbnRoPTIgIDs7CiAgICAgICAgICAgIE1hcikgbW9udGg9TWFyY2g7ICAgICBudW1tb250aD0zICA7OwogICAgICAgICAgICBBcHIpIG1vbnRoPUFwcmlsOyAgICAgbnVtbW9udGg9NCAgOzsKICAgICAgICAgICAgTWF5KSBtb250aD1NYXk7ICAgICAgIG51bW1vbnRoPTUgIDs7CiAgICAgICAgICAgIEp1bikgbW9udGg9SnVuZTsgICAgICBudW1tb250aD02ICA7OwogICAgICAgICAgICBKdWwpIG1vbnRoPUp1bHk7ICAgICAgbnVtbW9udGg9NyAgOzsKICAgICAgICAgICAgQXVnKSBtb250aD1BdWd1c3Q7ICAgIG51bW1vbnRoPTggIDs7CiAgICAgICAgICAgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05ICA7OwogICAgICAgICAgICBPY3QpIG1vbnRoPU9jdG9iZXI7ICAgbnVtbW9udGg9MTAgOzsKICAgICAgICAgICAgTm92KSBtb250aD1Ob3ZlbWJlcjsgIG51bW1vbnRoPTExIDs7CiAgICAgICAgICAgIERlYykgbW9udGg9RGVjZW1iZXI7ICBudW1tb250aD0xMiA7OwogICAgICAgIGVzYWMKICAgIGRvbmUKICAgIGRheT0iJDIiCiAgICB5ZWFyPSIkMyIKCiAgICAjICAgV2UgZmluYWxseSBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgcHJvYmxlbSB0aGF0IHRoZSAibHMiIG91dHB1dAogICAgIyAgIGdpdmVzIGVpdGhlciB0aGUgdGltZSBvZiB0aGUgZGF5IG9yIHRoZSB5ZWFyLgogICAgY2FzZSAkeWVhciBpbgogICAgICAgICo6KikKICAgICAgICAgICAgdGhpc195ZWFyPWBkYXRlICcrJVknIDI+L2Rldi9udWxsYAogICAgICAgICAgICBpZiBbICIuJHRoaXNfeWVhciIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgIHRoaXNfeWVhcj1gZGF0ZSAnKyV5J2AKICAgICAgICAgICAgICAgIGNhc2UgJHRoaXNfeWVhciBpbgogICAgICAgICAgICAgICAgICAgIFs1LTldWzAtOV0pIHRoaXNfeWVhcj0iMTkkdGhpc195ZWFyIiA7OwogICAgICAgICAgICAgICAgICAgIFswLTRdWzAtOV0pIHRoaXNfeWVhcj0iMjAkdGhpc195ZWFyIiA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBmaQogICAgICAgICAgICAjICAgZm9yIHRoZSBmb2xsb3dpbmcgbW9udGhzIG9mIHRoZSBsYXN0IHllYXIgdGhlIHRpbWUgbm90YXRpb24KICAgICAgICAgICAgIyAgIGlzIHVzdWFsbHkgYWxzbyB1c2VkIGZvciBmaWxlcyBtb2RpZmllZCBpbiB0aGUgbGFzdCB5ZWFyLgogICAgICAgICAgICB0aGlzX21vbnRoPWBkYXRlICcrJW0nYAogICAgICAgICAgICBpZiAoZXhwciAkbnVtbW9udGggXD4gJHRoaXNfbW9udGgpID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIHRoaXNfeWVhcj1gZXhwciAkdGhpc195ZWFyIC0gMWAKICAgICAgICAgICAgZmkKICAgICAgICAgICAgeWVhcj0iJHRoaXNfeWVhciIKICAgICAgICAgICAgOzsKICAgIGVzYWMKCiAgICAjICAgT3B0aW9uYWxseSBmaWxsIGRheSBhbmQgbW9udGggd2l0aCBsZWVkaW5nIHplcm9zCiAgICBpZiBbICIuJG9wdF96IiA9IC55ZXMgXTsgdGhlbgogICAgICAgIGNhc2UgJGRheSBpbgogICAgICAgICAgICBbMC05XVswLTldICkgOzsKICAgICAgICAgICAgICAgICBbMC05XSApIGRheT0iMCRkYXkiIDs7CiAgICAgICAgZXNhYwogICAgICAgIGNhc2UgJG51bW1vbnRoIGluCiAgICAgICAgICAgIFswLTldWzAtOV0gKSA7OwogICAgICAgICAgICAgICAgIFswLTldICkgbnVtbW9udGg9IjAkbnVtbW9udGgiIDs7CiAgICAgICAgZXNhYwogICAgZmkKCiAgICAjICAgT3B0aW9uYWxseSB1c2UgZGlnaXRzIGZvciBtb250aAogICAgaWYgWyAiLiRvcHRfZCIgPSAueWVzIF07IHRoZW4KICAgICAgICBtb250aD0iJG51bW1vbnRoIgogICAgZmkKCiAgICAjICAgT3B0aW9uYWxseSBzaG9ydGVuIHRoZSBtb250aCBuYW1lIHRvIHRocmVlIGNoYXJhY3RlcnMKICAgIGlmIFsgIi4kb3B0X3MiID0gLnllcyBdOyB0aGVuCiAgICAgICAgbW9udGg9YGVjaG8gJG1vbnRoIHwgY3V0IC1jMS0zYAogICAgZmkKCiAgICAjICAgT3V0cHV0IHRoZSByZXN1bHRpbmcgZGF0ZSBzdHJpbmcKICAgIGVjaG8gZHVtbXkgfCBhd2sgJ3sKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgIG5vdyA9IHN1YnN0cihvcmRlciwgMSwgMSk7CiAgICAgICAgICAgIG9yZGVyID0gc3Vic3RyKG9yZGVyLCAyKTsKICAgICAgICAgICAgaWYgKG5vdyA9PSAiZCIpCiAgICAgICAgICAgICAgICBvdXQgPSBkYXk7CiAgICAgICAgICAgIGVsc2UgaWYgKG5vdyA9PSAibSIpCiAgICAgICAgICAgICAgICBvdXQgPSBtb250aDsKICAgICAgICAgICAgZWxzZSBpZiAobm93ID09ICJ5IikKICAgICAgICAgICAgICAgIG91dCA9IHllYXI7CiAgICAgICAgICAgIGlmIChpIDwgMikKICAgICAgICAgICAgICAgIHByaW50ZigiJXMlcyIsIG91dCwgZmllbGQpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGYoIiVzIiwgb3V0KTsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld2xpbmUgIT0gInllcyIpCiAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0nICJkYXk9JGRheSIgIm1vbnRoPSRtb250aCIgInllYXI9JHllYXIiIFwKICAgICAgICJmaWVsZD0kb3B0X2YiICJvcmRlcj0kb3B0X28iICJuZXdsaW5lPSRvcHRfbiIKCiAgICBzaHRvb2xfZXhpdCAwCiAgICA7OwoKdGFibGUgKQogICAgIyMKICAgICMjICB0YWJsZSAtLSBQcmV0dHktcHJpbnQgYSBmaWVsZC1zZXBhcmF0ZWQgbGlzdCBhcyBhIHRhYmxlCiAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KICAgICMjCgogICAgaWYgWyAkb3B0X2MgLWd0IDQgXTsgdGhlbgogICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGNvbHVtcyAoMS4uNCBhbGxvd2VkIG9ubHkpIiAxPiYyCiAgICAgICAgc2h0b29sX2V4aXQgMQogICAgZmkKICAgIGNhc2UgIngkb3B0X0YiIGluCiAgICAgICAgeD8gKSA7OwogICAgICAgICogICkgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogSW52YWxpZCBzZXBhcmF0b3IgKG9uZSBjaGFyIGFsbG93ZWQgb25seSkiIDE+JjI7IHNodG9vbF9leGl0IDEgOzsKICAgIGVzYWMKCiAgICAjICAgc3BsaXQgdGhlIGxpc3QgaW50byBhIHRhYmxlCiAgICBsaXN0PWAKICAgICAgICBJRlM9IiRvcHRfRiIKICAgICAgICBmb3IgZW50cnkgaW4gJCo7IGRvCiAgICAgICAgICAgIGlmIFsgIi4kZW50cnkiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiJGVudHJ5IgogICAgICAgICAgICBmaQogICAgICAgIGRvbmUgfFwKICAgICAgICBhd2sgIgogICAgICAgICAgICBCRUdJTiB7IGxpc3QgPSBcIlwiOyBuID0gMDsgfQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdCBcXCQxOwogICAgICAgICAgICAgICAgbiA9IG4gKyAxOwogICAgICAgICAgICAgICAgaWYgKG4gPCAkb3B0X2MpIHsKICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdCBcIjpcIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChuID09ICRvcHRfYykgewogICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0IFwiXFxuXCI7CiAgICAgICAgICAgICAgICAgICAgbiA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgRU5EIHsgcHJpbnQgbGlzdDsgfQogICAgICAgICAiCiAgICBgCgogICAgIyAgIGZvcm1hdCB0YWJsZSBjZWxscyBhbmQgbWFrZSBzdXJlIHRhYmxlCiAgICAjICAgZG9lc24ndCBleGNlZWQgbWF4aW11bSB3aWR0aAogICAgT0lGUz0iJElGUyIKICAgIElGUz0nCicKICAgIGZvciBlbnRyeSBpbiAkbGlzdDsgZG8KICAgICAgICBjYXNlICRvcHRfYyBpbgogICAgICAgICAgICAxICkgZXZhbCAiZWNobyBcIlwke2VudHJ5fVwiIHwgYXdrIC1GOiAneyBwcmludGYoXCIlLSR7b3B0X3d9c1xcblwiLCBcJDEpOyB9JyIgOzsKICAgICAgICAgICAgMiApIGV2YWwgImVjaG8gXCJcJHtlbnRyeX1cIiB8IGF3ayAtRjogJ3sgcHJpbnRmKFwiJS0ke29wdF93fXMgJS0ke29wdF93fXNcXG5cIiwgXCQxLCBcJDIpOyB9JyIgOzsKICAgICAgICAgICAgMyApIGV2YWwgImVjaG8gXCJcJHtlbnRyeX1cIiB8IGF3ayAtRjogJ3sgcHJpbnRmKFwiJS0ke29wdF93fXMgJS0ke29wdF93fXMgJS0ke29wdF93fXNcXG5cIiwgXCQxLCBcJDIsIFwkMyk7IH0nIiA7OwogICAgICAgICAgICA0ICkgZXZhbCAiZWNobyBcIlwke2VudHJ5fVwiIHwgYXdrIC1GOiAneyBwcmludGYoXCIlLSR7b3B0X3d9cyAlLSR7b3B0X3d9cyAlLSR7b3B0X3d9cyAlLSR7b3B0X3d9c1xcblwiLCBcJDEsIFwkMiwgXCQzLCBcJDQpOyB9JyIgOzsKICAgICAgICBlc2FjCiAgICBkb25lIHxcCiAgICBhd2sgInsKICAgICAgICBpZiAobGVuZ3RoKFwkMCkgPiAkb3B0X3MpIHsKICAgICAgICAgICAgcHJpbnRmKFwiJXNcXG5cIiwgc3Vic3RyKFwkMCwgMCwgJG9wdF9zLTEpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmludCBcJDA7CiAgICAgICAgfQogICAgfSIKICAgIElGUz0iJE9JRlMiCgogICAgc2h0b29sX2V4aXQgMAogICAgOzsKCnByb3AgKQogICAgIyMKICAgICMjICBwcm9wIC0tIERpc3BsYXkgcHJvZ3Jlc3Mgd2l0aCBhIHJ1bm5pbmcgcHJvcGVsbGVyCiAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KICAgICMjCgogICAgcGVybD0nJwogICAgZm9yIGRpciBpbiBgZWNobyAkUEFUSCB8IHNlZCAtZSAncy86LyAvZydgIC47IGRvCiAgICAgICAgaWYgWyAtZiAiJGRpci9wZXJsIiBdOyB0aGVuCiAgICAgICAgICAgIHBlcmw9IiRkaXIvcGVybCIKICAgICAgICAgICAgYnJlYWsKICAgICAgICBmaQogICAgZG9uZQogICAgaWYgWyAiLiRwZXJsIiAhPSAuIF07IHRoZW4KICAgICAgICAjICAgUGVybCBpcyBwcmVmZXJyZWQgYmVjYXVzZSB3cml0aW5nIHRvIFNUREVSUiBpbgogICAgICAgICMgICBQZXJsIHJlYWxseSB3cml0ZXMgaW1tZWRpYXRlbHkgYXMgb25lIHdvdWxkIGV4cGVjdAogICAgICAgICRwZXJsIC1lICcKICAgICAgICAgICAgQHAgPSAoInwiLCIvIiwiLSIsIlxcIik7CiAgICAgICAgICAgICRpID0gMDsKICAgICAgICAgICAgd2hpbGUgKDxTVERJTj4pIHsKICAgICAgICAgICAgICAgIHByaW50ZihTVERFUlIgIlxyJXMuLi4lc1xiIiwgJEFSR1ZbMF0sICRwWyRpKytdKTsKICAgICAgICAgICAgICAgICRpID0gMCBpZiAoJGkgPiAzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludGYoU1RERVJSICJcciVzICAgIFxuIiwgJEFSR1ZbMF0pOwogICAgICAgICcgIiRvcHRfcCIKICAgIGVsc2UKICAgICAgICAjICAgQnV0IGlmIFBlcmwgZG9lc24ndCBleGlzdHMgd2UgdXNlIEF3ayBldmVuCiAgICAgICAgIyAgIHNvbWUgQXdrJ3MgYnVmZmVyIGV2ZW4gdGhlIC9kZXYvc3RkZXJyIHdyaXRpbmcgOi0oCiAgICAgICAgYXdrICcKICAgICAgICAgICAgQkVHSU4gewogICAgICAgICAgICAgICAgc3BsaXQoInwjLyMtI1xcIiwgcCwgIiMiKTsKICAgICAgICAgICAgICAgIGkgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHByaW50ZigiXHIlcyVjXGIiLCBwcmVmaXgsIHBbaSsrXSkgPiAiL2Rldi9zdGRlcnIiOwogICAgICAgICAgICAgICAgaWYgKGkgPiA0KSB7IGkgPSAxOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgRU5EIHsKICAgICAgICAgICAgICAgIHByaW50ZigiXHIlcyAgICBcbiIsIHByZWZpeCkgPiAiL2Rldi9zdGRlcnIiOwogICAgICAgICAgICB9CiAgICAgICAgJyAicHJlZml4PSRvcHRfcCIKICAgIGZpCgogICAgc2h0b29sX2V4aXQgMAogICAgOzsKCm1vdmUgKQogICAgIyMKICAgICMjICBtb3ZlIC0tIE1vdmUgZmlsZXMgd2l0aCBzaW11bHRhbmVvdXMgc3Vic3RpdHV0aW9uCiAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KICAgICMjCgogICAgc3JjPSIkMSIKICAgIGRzdD0iJDIiCgogICAgIyAgIGNvbnNpc3RlbmN5IGNoZWNrcwogICAgaWYgWyAiLiRzcmMiID0gLiBdIHx8IFsgIi4kZHN0IiA9IC4gXTsgdGhlbgogICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IEludmFsaWQgYXJndW1lbnRzIiAxPiYyCiAgICAgICAgc2h0b29sX2V4aXQgMQogICAgZmkKICAgIGlmIFsgIi4kc3JjIiA9ICIuJGRzdCIgXTsgdGhlbgogICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IFNvdXJjZSBhbmQgZGVzdGluYXRpb24gZmlsZXMgYXJlIHRoZSBzYW1lIiAxPiYyCiAgICAgICAgc2h0b29sX2V4aXQgMQogICAgZmkKICAgIGV4cHNyYz0iJHNyYyIKICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdOyB0aGVuCiAgICAgICAgZXhwc3JjPSJgZWNobyAkZXhwc3JjYCIKICAgIGZpCiAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIGlmIFsgIi5gZWNobyAiJHNyYyIgfCBzZWQgLWUgJ3M7Xi4qXFwqLiokOzsnYCIgPSAiLiRzcmMiIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogU291cmNlIGRvZXNuJ3QgY29udGFpbiB3aWxkY2FyZCAoJyonKTogJGRzdCIgMT4mMgogICAgICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICAgICAgZmkKICAgICAgICBpZiBbICIuYGVjaG8gIiRkc3QiIHwgc2VkIC1lICdzO14uKiVbMS05XS4qJDs7J2AiID0gIi4kZHN0IiBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IERlc3RpbmF0aW9uIGRvZXNuJ3QgY29udGFpbiBzdWJzdGl0dXRpb24gKCclTicpOiAkZHN0IiAxPiYyCiAgICAgICAgICAgIHNodG9vbF9leGl0IDEKICAgICAgICBmaQogICAgICAgIGlmIFsgIi4kZXhwc3JjIiA9ICIuJHNyYyIgXTsgdGhlbgogICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBTb3VyY2VzIG5vdCBmb3VuZCBvciBubyBhc3RlcmlzayA6ICRzcmMiIDE+JjIKICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgIGZpCiAgICBlbHNlCiAgICAgICAgaWYgWyAhIC1yICIkc3JjIiBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IFNvdXJjZSBub3QgZm91bmQ6ICRzcmMiIDE+JjIKICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgIGZpCiAgICBmaQoKICAgICMgICBkZXRlcm1pbmUgc3Vic3RpdHV0aW9uIHBhdHRlcm5zCiAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIHNyY3BhdD1gZWNobyAiJHNyYyIgfCBzZWQgLWUgJ3MvXFwuL1xcXFwuL2cnIC1lICdzLzsvXFw7L2cnIC1lICdzO1xcKjtcXFxcKC4qXFxcXCk7ZydgCiAgICAgICAgZHN0cGF0PWBlY2hvICIkZHN0IiB8IHNlZCAtZSAnczslXChbMS05XVwpO1xcXFxcMTtnJ2AKICAgIGZpCgogICAgIyAgIGl0ZXJhdGUgb3ZlciBzb3VyY2UocykKICAgIGZvciBvbmVzcmMgaW4gJGV4cHNyYzsgZG8KICAgICAgICBpZiBbIC4kb3B0X2UgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgb25lZHN0PWBlY2hvICRvbmVzcmMgfCBzZWQgLWUgInM7JHNyY3BhdDskZHN0cGF0OyJgCiAgICAgICAgZWxzZQogICAgICAgICAgICBvbmVkc3Q9IiRkc3QiCiAgICAgICAgZmkKICAgICAgICBlcnJvcnN0YXR1cz0wCiAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG9uZXNyYyAtPiAkb25lZHN0IgogICAgICAgIGZpCiAgICAgICAgaWYgWyAiLiRvcHRfcCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAtciAkb25lZHN0IF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIGNtcCAtcyAkb25lc3JjICRvbmVkc3Q7IHRoZW4KICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJybSAtZiAkb25lc3JjIiAxPiYyCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBybSAtZiAkb25lc3JjIHx8IGVycm9yc3RhdHVzPSQ/CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAibXYgLWYgJG9uZXNyYyAkb25lZHN0IiAxPiYyCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBtdiAtZiAkb25lc3JjICRvbmVkc3QgfHwgZXJyb3JzdGF0dXM9JD8KICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNobyAibXYgLWYgJG9uZXNyYyAkb25lZHN0IiAxPiYyCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgbXYgLWYgJG9uZXNyYyAkb25lZHN0IHx8IGVycm9yc3RhdHVzPSQ/CiAgICAgICAgICAgIGZpCiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAibXYgLWYgJG9uZXNyYyAkb25lZHN0IiAxPiYyCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIG12IC1mICRvbmVzcmMgJG9uZWRzdCB8fCBlcnJvcnN0YXR1cz0kPwogICAgICAgIGZpCiAgICAgICAgaWYgWyAkZXJyb3JzdGF0dXMgLW5lIDAgXTsgdGhlbgogICAgICAgICAgICBicmVhazsKICAgICAgICBmaQogICAgZG9uZQoKICAgIHNodG9vbF9leGl0ICRlcnJvcnN0YXR1cwogICAgOzsKCmluc3RhbGwgKQogICAgIyMKICAgICMjICBpbnN0YWxsIC0tIEluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQgb3IgZGF0YWZpbGUKICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTctMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgogICAgIyMKCiAgICAjICAgc3BlY2lhbCBjYXNlOiAic2h0b29sIGluc3RhbGwgLWQgPGRpcj4gWy4uLl0iIGludGVybmFsbHkKICAgICMgICBtYXBzIHRvICJzaHRvb2wgbWtkaXIgLWYgLXAgLW0gNzU1IDxkaXI+IFsuLi5dIgogICAgaWYgWyAiJG9wdF9kIiA9IHllcyBdOyB0aGVuCiAgICAgICAgY21kPSIkMCBta2RpciAtZiAtcCAtbSA3NTUiCiAgICAgICAgaWYgWyAiLiRvcHRfbyIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgIGNtZD0iJGNtZCAtbyAnJG9wdF9vJyIKICAgICAgICBmaQogICAgICAgIGlmIFsgIi4kb3B0X2ciICE9IC4gXTsgdGhlbgogICAgICAgICAgICBjbWQ9IiRjbWQgLWcgJyRvcHRfZyciCiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBjbWQ9IiRjbWQgLXYiCiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBjbWQ9IiRjbWQgLXQiCiAgICAgICAgZmkKICAgICAgICBmb3IgZGlyIGluICIkQCI7IGRvCiAgICAgICAgICAgIGV2YWwgIiRjbWQgJGRpciIgfHwgc2h0b29sX2V4aXQgJD8KICAgICAgICBkb25lCiAgICAgICAgc2h0b29sX2V4aXQgMAogICAgZmkKCiAgICAjICAgZGV0ZXJtaW5lIHNvdXJjZShzKSBhbmQgZGVzdGluYXRpb24KICAgIGFyZ2M9JCMKICAgIHNyY3M9IiIKICAgIHdoaWxlIFsgJCMgLWd0IDEgXTsgZG8KICAgICAgICBzcmNzPSIkc3JjcyAkMSIKICAgICAgICBzaGlmdAogICAgZG9uZQogICAgZHN0cGF0aD0iJDEiCgogICAgIyAgIHR5cGUgY2hlY2sgZm9yIGRlc3RpbmF0aW9uCiAgICBkc3Rpc2Rpcj0wCiAgICBpZiBbIC1kICRkc3RwYXRoIF07IHRoZW4KICAgICAgICBkc3RwYXRoPWBlY2hvICIkZHN0cGF0aCIgfCBzZWQgLWUgJ3M6LyQ6OidgCiAgICAgICAgZHN0aXNkaXI9MQogICAgZmkKCiAgICAjICAgY29uc2lzdGVuY3kgY2hlY2sgZm9yIGRlc3RpbmF0aW9uCiAgICBpZiBbICRhcmdjIC1ndCAyIF0gJiYgWyAkZHN0aXNkaXIgPSAwIF07IHRoZW4KICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBtdWx0aXBsZSBzb3VyY2VzIHJlcXVpcmUgZGVzdGluYXRpb24gdG8gYmUgZGlyZWN0b3J5IiAxPiYyCiAgICAgICAgc2h0b29sX2V4aXQgMQogICAgZmkKCiAgICAjICAgaXRlcmF0ZSBvdmVyIGFsbCBzb3VyY2UocykKICAgIGZvciBzcmMgaW4gJHNyY3M7IGRvCiAgICAgICAgZHN0PSRkc3RwYXRoCgogICAgICAgICMgICBpZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZQogICAgICAgIGlmIFsgJGRzdGlzZGlyID0gMSBdOyB0aGVuCiAgICAgICAgICAgIGRzdGZpbGU9YGVjaG8gIiRzcmMiIHwgc2VkIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7J2AKICAgICAgICAgICAgZHN0PSIkZHN0LyRkc3RmaWxlIgogICAgICAgIGZpCgogICAgICAgICMgICBjaGVjayBmb3IgY29ycmVjdCBhcmd1bWVudHMKICAgICAgICBpZiBbICIuJHNyYyIgPSAiLiRkc3QiIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSAtIHNraXBwZWQiIDE+JjIKICAgICAgICAgICAgY29udGludWUKICAgICAgICBmaQogICAgICAgIGlmIFsgLWQgIiRzcmMiIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiBzb3VyY2UgXGAkc3JjJyBpcyBhIGRpcmVjdG9yeSAtIHNraXBwZWQiIDE+JjIKICAgICAgICAgICAgY29udGludWUKICAgICAgICBmaQoKICAgICAgICAjICAgbWFrZSBhIHRlbXAgZmlsZSBuYW1lIGluIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKICAgICAgICBkc3R0bXA9YGVjaG8gJGRzdCB8XAogICAgICAgICAgICAgICAgc2VkIC1lICdzO1teL10qJDs7JyAtZSAncztcKC5cKS8kO1wxOycgLWUgJ3M7XiQ7LjsnIFwKICAgICAgICAgICAgICAgICAgICAtZSAicztcJDsvI0lOU1RAJCQjOyJgCgogICAgICAgICMgICB2ZXJib3NpdHkKICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBlY2hvICIkc3JjIC0+ICRkc3QiIDE+JjIKICAgICAgICBmaQoKICAgICAgICAjICAgY29weSBvciBtb3ZlIHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQogICAgICAgICMgICAoYmVjYXVzZSB3ZSBtaWdodCBiZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIHNvdXJjZSkKICAgICAgICBpZiBbICIuJG9wdF9DIiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBvcHRfYz15ZXMKICAgICAgICBmaQogICAgICAgIGlmIFsgIi4kb3B0X2MiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICJjcCAkc3JjICRkc3R0bXAiIDE+JjIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgY3AgJHNyYyAkZHN0dG1wIHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAibXYgJHNyYyAkZHN0dG1wIiAxPiYyCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIG12ICRzcmMgJGRzdHRtcCB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgIGZpCgogICAgICAgICMgICBhZGp1c3QgdGhlIHRhcmdldCBmaWxlCiAgICAgICAgaWYgWyAiLiRvcHRfZSIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgIHNlZD0nc2VkJwogICAgICAgICAgICBPSUZTPSIkSUZTIjsgSUZTPSIkQVNDX05MIjsgc2V0IC0tICRvcHRfZTsgSUZTPSIkT0lGUyIKICAgICAgICAgICAgZm9yIGUKICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIHNlZD0iJHNlZCAtZSAnJGUnIgogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIGNwICRkc3R0bXAgJGRzdHRtcC5vbGQKICAgICAgICAgICAgY2htb2QgdSt3ICRkc3R0bXAKICAgICAgICAgICAgZXZhbCAiJHNlZCA8JGRzdHRtcC5vbGQgPiRkc3R0bXAiIHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgIHJtIC1mICRkc3R0bXAub2xkCiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF9zIiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAic3RyaXAgJGRzdHRtcCIgMT4mMgogICAgICAgICAgICBmaQogICAgICAgICAgICBzdHJpcCAkZHN0dG1wIHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF9vIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gImNob3duICRvcHRfbyAkZHN0dG1wIiAxPiYyCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGNob3duICRvcHRfbyAkZHN0dG1wIHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF9nIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gImNoZ3JwICRvcHRfZyAkZHN0dG1wIiAxPiYyCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGNoZ3JwICRvcHRfZyAkZHN0dG1wIHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF9tIiAhPSAiLi0iIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gImNobW9kICRvcHRfbSAkZHN0dG1wIiAxPiYyCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGNobW9kICRvcHRfbSAkZHN0dG1wIHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgZmkKCiAgICAgICAgIyAgIGRldGVybWluZSB3aGV0aGVyIHRvIGRvIGEgcXVpY2sgaW5zdGFsbAogICAgICAgICMgICAoaGFzIHRvIGJlIGRvbmUgX2FmdGVyXyB0aGUgc3RyaXAgd2FzIGFscmVhZHkgZG9uZSkKICAgICAgICBxdWljaz1ubwogICAgICAgIGlmIFsgIi4kb3B0X0MiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGlmIFsgLXIgJGRzdCBdOyB0aGVuCiAgICAgICAgICAgICAgICBpZiBjbXAgLXMgJHNyYyAkZHN0OyB0aGVuCiAgICAgICAgICAgICAgICAgICAgcXVpY2s9eWVzCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmaQogICAgICAgIGZpCgogICAgICAgICMgICBmaW5hbGx5LCBpbnN0YWxsIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uCiAgICAgICAgaWYgWyAkcXVpY2sgPSB5ZXMgXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAicm0gLWYgJGRzdHRtcCIgMT4mMgogICAgICAgICAgICBmaQogICAgICAgICAgICBybSAtZiAkZHN0dG1wCiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAicm0gLWYgJGRzdCAmJiBtdiAkZHN0dG1wICRkc3QiIDE+JjIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgcm0gLWYgJGRzdCAmJiBtdiAkZHN0dG1wICRkc3QKICAgICAgICBmaQogICAgZG9uZQoKICAgIHNodG9vbF9leGl0IDAKICAgIDs7Cgpta2RpciApCiAgICAjIwogICAgIyMgIG1rZGlyIC0tIE1ha2Ugb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMKICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgogICAgIyMKCiAgICBlcnJzdGF0dXM9MAogICAgZm9yIHAgaW4gJHsxKyIkQCJ9OyBkbwogICAgICAgICMgICBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLi4uCiAgICAgICAgaWYgWyAtZCAiJHAiIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAiLiRvcHRfZiIgPSAubm8gXSAmJiBbICIuJG9wdF9wIiA9IC5ubyBdOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHM6ICRwIiAxPiYyCiAgICAgICAgICAgICAgICBlcnJzdGF0dXM9MQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgZmkKICAgICAgICBmaQogICAgICAgICMgICBpZiB0aGUgZGlyZWN0b3J5IGhhcyB0byBiZSBjcmVhdGVkLi4uCiAgICAgICAgaWYgWyAiLiRvcHRfcCIgPSAubm8gXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAibWtkaXIgJHAiIDE+JjIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgbWtkaXIgJHAgfHwgZXJyc3RhdHVzPSQ/CiAgICAgICAgICAgIGlmIFsgIi4kb3B0X28iICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG93biAkb3B0X28gJHAiIDE+JjIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBjaG93biAkb3B0X28gJHAgfHwgZXJyc3RhdHVzPSQ/CiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X2ciICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICJjaGdycCAkb3B0X2cgJHAiIDE+JjIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBjaGdycCAkb3B0X2cgJHAgfHwgZXJyc3RhdHVzPSQ/CiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X20iICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG1vZCAkb3B0X20gJHAiIDE+JjIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBjaG1vZCAkb3B0X20gJHAgfHwgZXJyc3RhdHVzPSQ/CiAgICAgICAgICAgIGZpCiAgICAgICAgZWxzZQogICAgICAgICAgICAjICAgdGhlIHNtYXJ0IHNpdHVhdGlvbgogICAgICAgICAgICBzZXQgZm5vcmQgYGVjaG8gIjokcCIgfFwKICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvXjpcLy8lLycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eOi8vJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL1wvLyAvZycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eJS9cLy8nYAogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBwYXRoY29tcD0nJwogICAgICAgICAgICBmb3IgZCBpbiAkezErIiRAIn07IGRvCiAgICAgICAgICAgICAgICBwYXRoY29tcD0iJHBhdGhjb21wJGQiCiAgICAgICAgICAgICAgICBjYXNlICIkcGF0aGNvbXAiIGluCiAgICAgICAgICAgICAgICAgICAgLSogKSBwYXRoY29tcD0iLi8kcGF0aGNvbXAiIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICBpZiBbICEgLWQgIiRwYXRoY29tcCIgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIgMT4mMgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgbWtkaXIgJHBhdGhjb21wIHx8IGVycnN0YXR1cz0kPwogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X28iICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hvd24gJG9wdF9vICRwYXRoY29tcCIgMT4mMgogICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICBjaG93biAkb3B0X28gJHBhdGhjb21wIHx8IGVycnN0YXR1cz0kPwogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfZyIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaGdycCAkb3B0X2cgJHBhdGhjb21wIiAxPiYyCiAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZ3JwICRvcHRfZyAkcGF0aGNvbXAgfHwgZXJyc3RhdHVzPSQ/CiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF9tIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImNobW9kICRvcHRfbSAkcGF0aGNvbXAiIDE+JjIKICAgICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICAgICAgY2htb2QgJG9wdF9tICRwYXRoY29tcCB8fCBlcnJzdGF0dXM9JD8KICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgogICAgICAgICAgICBkb25lCiAgICAgICAgZmkKICAgIGRvbmUKCiAgICBzaHRvb2xfZXhpdCAkZXJyc3RhdHVzCiAgICA7OwoKbWtsbiApCiAgICAjIwogICAgIyMgIG1rbG4gLS0gTWFrZSBsaW5rIHdpdGggY2FsY3VsYXRpb24gb2YgcmVsYXRpdmUgcGF0aHMKICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgogICAgIyMKCiAgICAjICAgZGV0ZXJtaW5lIHNvdXJjZShzKSBhbmQgZGVzdGluYXRpb24KICAgIGFyZ3M9JD8KICAgIHNyY3M9IiIKICAgIHdoaWxlIFsgJCMgLWd0IDEgXTsgZG8KICAgICAgICBzcmNzPSIkc3JjcyAkMSIKICAgICAgICBzaGlmdAogICAgZG9uZQogICAgZHN0PSIkMSIKICAgIGlmIFsgISAtZCAkZHN0IF07IHRoZW4KICAgICAgICBpZiBbICRhcmdzIC1ndCAyIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogbXVsdGlwbGUgc291cmNlcyBub3QgYWxsb3dlZCB3aGVuIHRhcmdldCBpc24ndCBhIGRpcmVjdG9yeSIgMT4mMgogICAgICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICAgICAgZmkKICAgIGZpCgogICAgIyAgIGRldGVybWluZSBsaW5rIG9wdGlvbnMKICAgIGxub3B0PSIiCiAgICBpZiBbICIuJG9wdF9mIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIGxub3B0PSIkbG5vcHQgLWYiCiAgICBmaQogICAgaWYgWyAiLiRvcHRfcyIgPSAueWVzIF07IHRoZW4KICAgICAgICBsbm9wdD0iJGxub3B0IC1zIgogICAgZmkKCiAgICAjICAgaXRlcmF0ZSBvdmVyIHNvdXJjZXMKICAgIGZvciBzcmMgaW4gJHNyY3M7IGRvCiAgICAgICAgIyAgIGRldGVybWluZSBpZiBvbmUgb2YgdGhlIHBhdGhzIGlzIGFuIGFic29sdXRlIHBhdGgsCiAgICAgICAgIyAgIGJlY2F1c2UgdGhlbiB3ZSBfaGF2ZV8gdG8gdXNlIGFuIGFic29sdXRlIHN5bWxpbmsKICAgICAgICBvbmVpc2Ficz0wCiAgICAgICAgc3JjaXNhYnM9MAogICAgICAgIGRzdGlzYWJzPTAKICAgICAgICBjYXNlICRzcmMgaW4KICAgICAgICAgICAgLyogKSBvbmVpc2Ficz0xOyBzcmNpc2Ficz0xIDs7CiAgICAgICAgZXNhYwogICAgICAgIGNhc2UgJGRzdCBpbgogICAgICAgICAgICAvKiApIG9uZWlzYWJzPTE7IGRzdGlzYWJzPTEgOzsKICAgICAgICBlc2FjCgogICAgICAgICMgICBzcGxpdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGludG8gZGlyIGFuZCBiYXNlIG5hbWUKICAgICAgICBpZiBbIC1kICRzcmMgXTsgdGhlbgogICAgICAgICAgICBzcmNkaXI9YGVjaG8gJHNyYyB8IHNlZCAtZSAnczsvKiQ7OydgCiAgICAgICAgICAgIHNyY2Jhc2U9IiIKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNyY2Rpcj1gZWNobyAgJHNyYyB8IHNlZCAtZSAnczteW14vXSokOzsnIC1lICdzO15cKC4qL1wpW14vXSokO1wxOycgLWUgJ3M7XCguXCkvJDtcMTsnYAogICAgICAgICAgICBzcmNiYXNlPWBlY2hvICRzcmMgfCBzZWQgLWUgJ3M7LiovXChbXi9dKlwpJDtcMTsnYAogICAgICAgIGZpCiAgICAgICAgaWYgWyAtZCAkZHN0IF07IHRoZW4KICAgICAgICAgICAgZHN0ZGlyPWBlY2hvICRkc3QgfCBzZWQgLWUgJ3M7LyokOzsnYAogICAgICAgICAgICBkc3RiYXNlPSIiCiAgICAgICAgZWxzZQogICAgICAgICAgICBkc3RkaXI9YGVjaG8gICRkc3QgfCBzZWQgLWUgJ3M7XlteL10qJDs7JyAtZSAnczteXCguKi9cKVteL10qJDtcMTsnIC1lICdzO1woLlwpLyQ7XDE7J2AKICAgICAgICAgICAgZHN0YmFzZT1gZWNobyAkZHN0IHwgc2VkIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7J2AKICAgICAgICBmaQoKICAgICAgICAjICAgY29uc2lzdGVuY3kgY2hlY2sKICAgICAgICBpZiBbICIuJGRzdGRpciIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgIGlmIFsgISAtZCAkZHN0ZGlyIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBub3QgZm91bmQ6ICRkc3RkaXIiIDE+JjIKICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICBmaQoKICAgICAgICAjICAgbWFrZSBzdXJlIHRoZSBzb3VyY2UgaXMgcmVhY2hhYmxlIGZyb20gdGhlIGRlc3RpbmF0aW9uCiAgICAgICAgaWYgWyAkZHN0aXNhYnMgPSAxIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAkc3JjaXNhYnMgPSAwIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFsgIi4kc3JjZGlyIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIHNyY2Rpcj0iYHB3ZCB8IHNlZCAtZSAnczsvKiQ7OydgIgogICAgICAgICAgICAgICAgICAgIHNyY2lzYWJzPTEKICAgICAgICAgICAgICAgICAgICBvbmVpc2Ficz0xCiAgICAgICAgICAgICAgICBlbGlmIFsgLWQgJHNyY2RpciBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgc3JjZGlyPSJgY2QgJHNyY2RpcjsgcHdkIHwgc2VkIC1lICdzOy8qJDs7J2AiCiAgICAgICAgICAgICAgICAgICAgc3JjaXNhYnM9MQogICAgICAgICAgICAgICAgICAgIG9uZWlzYWJzPTEKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKCiAgICAgICAgIyAgIHNwbGl0IGF3YXkgYSBjb21tb24gcHJlZml4CiAgICAgICAgcHJlZml4PSIiCiAgICAgICAgaWYgWyAiLiRzcmNkaXIiID0gIi4kZHN0ZGlyIiBdICYmIFsgIi4kc3JjZGlyIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgcHJlZml4PSIkc3JjZGlyLyIKICAgICAgICAgICAgc3JjZGlyPSIiCiAgICAgICAgICAgIGRzdGRpcj0iIgogICAgICAgIGVsc2UKICAgICAgICAgICAgd2hpbGUgWyAiLiRzcmNkaXIiICE9IC4gXSAmJiBbICIuJGRzdGRpciIgIT0gLiBdOyBkbwogICAgICAgICAgICAgICAgcHJlc3JjPWBlY2hvICRzcmNkaXIgfCBzZWQgLWUgJ3M7XlwoW14vXSpcKS8uKjtcMTsnYAogICAgICAgICAgICAgICAgcHJlZHN0PWBlY2hvICRkc3RkaXIgfCBzZWQgLWUgJ3M7XlwoW14vXSpcKS8uKjtcMTsnYAogICAgICAgICAgICAgICAgaWYgWyAiLiRwcmVzcmMiICE9ICIuJHByZWRzdCIgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgcHJlZml4PSIkcHJlZml4JHByZXNyYy8iCiAgICAgICAgICAgICAgICBzcmNkaXI9YGVjaG8gJHNyY2RpciB8IHNlZCAtZSAnczteW14vXSovKjs7J2AKICAgICAgICAgICAgICAgIGRzdGRpcj1gZWNobyAkZHN0ZGlyIHwgc2VkIC1lICdzO15bXi9dKi8qOzsnYAogICAgICAgICAgICBkb25lCiAgICAgICAgZmkKCiAgICAgICAgIyAgIGRlc3RpbmF0aW9uIHByZWZpeCBpcyBqdXN0IHRoZSBjb21tb24gcHJlZml4CiAgICAgICAgZHN0cHJlPSIkcHJlZml4IgoKICAgICAgICAjICAgZGV0ZXJtaW5lIHNvdXJjZSBwcmVmaXggd2hpY2ggaXMgdGhlIHJldmVyc2UgZGlyZWN0b3J5CiAgICAgICAgIyAgIHN0ZXAtdXAgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5CiAgICAgICAgc3JjcHJlPSIiCgogICAgICAgIGlzcm9vdD0wCiAgICAgICAgaWYgWyAiLiRwcmVmaXgiID0gLiBdIHx8IFsgIi4kcHJlZml4IiA9IC4vIF07IHRoZW4KICAgICAgICAgICAgaXNyb290PTEKICAgICAgICBmaQogICAgICAgIGlmIFsgJG9uZWlzYWJzID0gMCBdIHx8IFsgJGlzcm9vdCA9IDAgXTsgdGhlbgogICAgICAgICAgICBwbD0iJGRzdGRpci8iCiAgICAgICAgICAgIE9JRlM9IiRJRlMiOyBJRlM9Jy8nCiAgICAgICAgICAgIGZvciBwZSBpbiAkcGw7IGRvCiAgICAgICAgICAgICAgICBbICIuJHBlIiA9IC4gIF0gJiYgY29udGludWUKICAgICAgICAgICAgICAgIFsgIi4kcGUiID0gLi4gXSAmJiBjb250aW51ZQogICAgICAgICAgICAgICAgc3JjcHJlPSIuLi8kc3JjcHJlIgogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIElGUz0iJE9JRlMiCiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbICRzcmNpc2FicyA9IDEgXTsgdGhlbgogICAgICAgICAgICAgICAgc3JjcHJlPSIkcHJlZml4IgogICAgICAgICAgICBmaQogICAgICAgIGZpCgogICAgICAgICMgICBkZXRlcm1pbmUgZGVzdGluYXRpb24gc3ltbGluayBuYW1lCiAgICAgICAgaWYgWyAiLiRkc3RiYXNlIiA9IC4gXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJHNyY2Jhc2UiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgZHN0YmFzZT0iJHNyY2Jhc2UiCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGRzdGJhc2U9YGVjaG8gIiRwcmVmaXgkc3JjZGlyIiB8IHNlZCAtZSAnczsvKiQ7OycgLWUgJ3M7LiovXChbXi9dKlwpJDtcMTsnYAogICAgICAgICAgICBmaQogICAgICAgIGZpCgogICAgICAgICMgICBub3cgZmluYWxpemUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgcGF0aHMKICAgICAgICBzcmNkaXI9YGVjaG8gJHNyY2RpciB8IHNlZCAtZSAncztcKFteL11cKSQ7XDEvOydgCiAgICAgICAgZHN0ZGlyPWBlY2hvICRkc3RkaXIgfCBzZWQgLWUgJ3M7XChbXi9dXCkkO1wxLzsnYAoKICAgICAgICAjICAgcnVuIHRoZSBmaW5hbCBsaW5rIGNvbW1hbmQKICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBlY2hvICJsbiRsbm9wdCAkc3JjcHJlJHNyY2RpciRzcmNiYXNlICRkc3RwcmUkZHN0ZGlyJGRzdGJhc2UiCiAgICAgICAgZmkKICAgICAgICBldmFsIGxuJGxub3B0ICRzcmNwcmUkc3JjZGlyJHNyY2Jhc2UgJGRzdHByZSRkc3RkaXIkZHN0YmFzZQogICAgZG9uZQoKICAgIHNodG9vbF9leGl0IDAKICAgIDs7Cgpta3NoYWRvdyApCiAgICAjIwogICAgIyMgIG1rc2hhZG93IC0tIE1ha2UgYSBzaGFkb3cgdHJlZSB0aHJvdWdoIHN5bWJvbGljIGxpbmtzCiAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KICAgICMjCgogICAgIyAgIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlyZWN0b3J5CiAgICBzcmM9YGVjaG8gIiQxIiB8IHNlZCAtZSAnczovJDo6JyAtZSAnczpeXC4vXCguXCk6XDE6J2AKICAgIGRzdD1gZWNobyAiJDIiIHwgc2VkIC1lICdzOi8kOjonIC1lICdzOl5cLi9cKC5cKTpcMTonYAoKICAgICMgICBjaGVjayB3aGV0aGVyIHNvdXJjZSBleGlzdHMKICAgIGlmIFsgISAtZCAkc3JjIF07IHRoZW4KICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IG5vdCBmb3VuZDogXGAkc3JjJyIgMT4mMgogICAgICAgIHNodG9vbF9leGl0IDEKICAgIGZpCgogICAgIyAgIGRldGVybWluZSBpZiBvbmUgb2YgdGhlIHBhdGhzIGlzIGFuIGFic29sdXRlIHBhdGgsCiAgICAjICAgYmVjYXVzZSB0aGVuIHdlIGhhdmUgdG8gdXNlIGFuIGFic29sdXRlIHN5bWxpbmsKICAgIG9uZWlzYWJzPTAKICAgIGNhc2UgJHNyYyBpbgogICAgICAgIC8qICkgb25laXNhYnM9MSA7OwogICAgZXNhYwogICAgY2FzZSAkZHN0IGluCiAgICAgICAgLyogKSBvbmVpc2Ficz0xIDs7CiAgICBlc2FjCgogICAgIyAgIGRldGVybWluZSByZXZlcnNlIGRpcmVjdG9yeSBmb3IgZGVzdGluYXRpb24gZGlyZWN0b3J5CiAgICBkc3RyZXZkaXI9JycKICAgIGlmIFsgJG9uZWlzYWJzID0gMCBdOyB0aGVuCiAgICAgICAgIyAgIGRlcml2ZSByZXZlcnNlIHBhdGggZnJvbSBmb3J3YXJkIHBhdGgKICAgICAgICBwd2Q9YHB3ZGAKICAgICAgICBPSUZTPSIkSUZTIjsgSUZTPScvJwogICAgICAgIGZvciBwZSBpbiAkZHN0OyBkbwogICAgICAgICAgICBpZiBbICJ4JHBlIiA9ICJ4Li4iIF07IHRoZW4KICAgICAgICAgICAgICAgIE9JRlMyPSIkSUZTIjsgSUZTPSIkRElGUyIKICAgICAgICAgICAgICAgIGV2YWwgYGVjaG8gIiRwd2QiIHxcCiAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3M6XChbXi9dKlwpJDo7IGRpcj0iXDEiOicgXAogICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzOl5cKC4qXCkvW14vXSo7OnB3ZD0iXDEiOzonXAogICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzOl47OnB3ZD0iIjs6J2AKICAgICAgICAgICAgICAgIGRzdHJldmRpcj0iJGRpci8kZHN0cmV2ZGlyIgogICAgICAgICAgICAgICAgSUZTPSIkT0lGUzIiCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGRzdHJldmRpcj0iLi4vJGRzdHJldmRpciIKICAgICAgICAgICAgZmkKICAgICAgICBkb25lCiAgICAgICAgSUZTPSIkT0lGUyIKICAgIGVsc2UKICAgICAgICBzcmM9ImBjZCAkc3JjOyBwd2RgIjsKICAgIGZpCgogICAgIyAgIGNyZWF0ZSBkaXJlY3RvcnkgdHJlZSBhdCBkZXN0aW5hdGlvbgogICAgaWYgWyAhIC1kICRkc3QgXTsgdGhlbgogICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIm1rZGlyICRkc3QiIDE+JjIKICAgICAgICBmaQogICAgICAgIG1rZGlyICRkc3QKICAgIGZpCiAgICBpZiBbICIuJG9wdF9hIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIERJUlM9YGNkICRzcmM7IGZpbmQgLiAtdHlwZSBkIC1wcmludCB8XAogICAgICAgICAgICAgIHNlZCAtZSAnL15cLiQvZCcgLWUgJ3M6XlwuLzo6J2AKICAgIGVsc2UKICAgICAgICBESVJTPWBjZCAkc3JjOyBmaW5kIC4gLXR5cGUgZCAtcHJpbnQgfFwKICAgICAgICAgICAgICBzZWQgLWUgJy9cL0NWUy9kJyAtZSAnL15cLiQvZCcgLWUgJ3M6XlwuLzo6J2AKICAgIGZpCiAgICBmb3IgZGlyIGluICRESVJTOyBkbwogICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIm1rZGlyICRkc3QvJGRpciIgMT4mMgogICAgICAgIGZpCiAgICAgICAgbWtkaXIgJGRzdC8kZGlyCiAgICBkb25lCgogICAgIyAgIGZpbGwgZGlyZWN0b3J5IHRyZWUgd2l0aCBzeW1saW5rcyB0byBmaWxlcwogICAgaWYgWyAiLiRvcHRfYSIgPSAueWVzIF07IHRoZW4KICAgICAgICBGSUxFUz0iYGNkICRzcmM7IGZpbmQgLiAtZGVwdGggLXByaW50IHxcCiAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvXlwuXC8vLydgIgogICAgZWxzZQogICAgICAgIEZJTEVTPSJgY2QgJHNyYzsgZmluZCAuIC1kZXB0aCAtcHJpbnQgfFwKICAgICAgICAgICAgICAgIHNlZCAtZSAnL1wubyQvZCcgLWUgJy9cLmEkL2QnIC1lICcvXC5zbyQvZCcgXAogICAgICAgICAgICAgICAgICAgIC1lICcvXC5jdnNpZ25vcmUkL2QnIC1lICcvXC9DVlMvZCcgXAogICAgICAgICAgICAgICAgICAgIC1lICcvXC9cLiMvZCcgLWUgJy9cLm9yaWckL2QnIFwKICAgICAgICAgICAgICAgICAgICAtZSAncy9eXC5cLy8vJ2AiCiAgICBmaQogICAgZm9yIGZpbGUgaW4gJEZJTEVTOyBkbwogICAgICAgICAjICBkb24ndCB1c2UgYC10eXBlIGYnIGFib3ZlIGZvciBmaW5kIGJlY2F1c2Ugb2Ygc3ltbGlua3MKICAgICAgICAgaWYgWyAtZCAiJHNyYy8kZmlsZSIgXTsgdGhlbgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZmkKICAgICAgICAgYmFzZW5hbWU9YGVjaG8gJGZpbGUgfCBzZWQgLWUgJ3M6Xi4qLzo6J2AKICAgICAgICAgZGlyPWBlY2hvICRmaWxlIHwgc2VkIC1lICdzOlteL10qJDo6JyAtZSAnczovJDo6JyAtZSAnczokOi86JyAtZSAnczpeLyQ6OidgCiAgICAgICAgIGZyb209YGVjaG8gIiRzcmMvJGZpbGUiIHwgc2VkIC1lICdzL15cLlwvLy8nYAogICAgICAgICB0bz0iJGRzdC8kZGlyJGJhc2VuYW1lIgogICAgICAgICBpZiBbICRvbmVpc2FicyA9IDAgXTsgdGhlbgogICAgICAgICAgICAgaWYgWyAiLiRkaXIiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgIHN1YmRpcj1gZWNobyAkZGlyIHwgc2VkIC1lICdzOi8kOjonYAogICAgICAgICAgICAgICAgICMgICBkZXJpdmUgcmV2ZXJzZSBwYXRoIGZyb20gZm9yd2FyZCBwYXRoCiAgICAgICAgICAgICAgICAgcmV2ZGlyPScnCiAgICAgICAgICAgICAgICAgT0lGUz0iJElGUyI7IElGUz0nLycKICAgICAgICAgICAgICAgICBmb3IgcGUgaW4gJHN1YmRpcjsgZG8KICAgICAgICAgICAgICAgICAgICAgcmV2ZGlyPSIuLi8kcmV2ZGlyIgogICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgICBJRlM9IiRPSUZTIgogICAgICAgICAgICAgICAgICMgICBmaW5hbGl6ZSBmcm9tCiAgICAgICAgICAgICAgICAgZnJvbT0iJHJldmRpciRmcm9tIgogICAgICAgICAgICAgZmkKICAgICAgICAgICAgIGZyb209IiRkc3RyZXZkaXIkZnJvbSIKICAgICAgICAgZmkKICAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgIGVjaG8gIiAgICAkdG8iIDE+JjIKICAgICAgICAgZmkKICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgIGVjaG8gImxuIC1zICRmcm9tICR0byIgMT4mMgogICAgICAgICBmaQogICAgICAgICBsbiAtcyAkZnJvbSAkdG8KICAgIGRvbmUKCiAgICBzaHRvb2xfZXhpdCAwCiAgICA7OwoKZml4cGVybSApCiAgICAjIwogICAgIyMgIGZpeHBlcm0gLS0gRml4IGZpbGUgcGVybWlzc2lvbnMgaW5zaWRlIGEgc291cmNlIHRyZWUKICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgogICAgIyMKCiAgICBwYXRocz0iJCoiCgogICAgIyAgIGNoZWNrIHdoZXRoZXIgdGhlIHRlc3QgY29tbWFuZCBzdXBwb3J0cyB0aGUgLXggb3B0aW9uCiAgICBpZiBbIC14IC9iaW4vc2ggXSAyPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIG1pbnVzeD0iLXgiCiAgICBlbHNlCiAgICAgICAgbWludXN4PSItciIKICAgIGZpCgogICAgIyAgIGl0ZXJhdGUgb3ZlciBwYXRocwogICAgZm9yIHAgaW4gJHBhdGhzOyBkbwogICAgICAgIGZvciBmaWxlIGluIGBmaW5kICRwIC1kZXB0aCAtcHJpbnRgOyBkbwogICAgICAgICAgICBpZiBbIC1mICRmaWxlIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFsgJG1pbnVzeCAkZmlsZSBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLXJ3eHIteHIteCAkZmlsZSIgMj4mMQogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2htb2QgNzU1ICRmaWxlIiAyPiYxCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBjaG1vZCA3NTUgJGZpbGUKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICItcnctci0tci0tICRmaWxlIiAyPiYxCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG1vZCA2NDQgJGZpbGUiIDI+JjEKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIGNobW9kIDY0NCAkZmlsZQogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGlmIFsgLWQgJGZpbGUgXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICJkcnd4ci14ci14ICRmaWxlIiAyPiYxCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG1vZCA3NTUgJGZpbGUiIDI+JjEKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBjaG1vZCA3NTUgJGZpbGUKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICI/Pz8/Pz8/Pz8/ICRmaWxlIiAyPiYxCiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgZG9uZQoKICAgIHNodG9vbF9leGl0IDAKICAgIDs7Cgpyb3RhdGUgKQogICAgIyMKICAgICMjICByb3RhdGUgLS0gTG9nZmlsZSByb3RhdGlvbgogICAgIyMgIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CiAgICAjIwoKICAgICMgICBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgZmlsZSB0byByb3RhdGUKICAgIGlmIFsgIi4kb3B0X24iID0gLjAgXTsgdGhlbgogICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgYXJndW1lbnQgXGAkb3B0X24nIHRvIG9wdGlvbiAtbi4iIDE+JjIKICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICBmaQoKICAgICMgICBjYW5vbmljYWxpemUgLXMgb3B0aW9uIGFyZ3VtZW50CiAgICBpZiBbICIuJG9wdF9zIiAhPSAuIF07IHRoZW4KICAgICAgICBpZiBbICIuYGV4cHIgJG9wdF9zIDogJ1swLTldKiQnYCIgIT0gLjAgXTsgdGhlbgogICAgICAgICAgICA6CiAgICAgICAgZWxpZiBbICIuYGV4cHIgJG9wdF9zIDogJ1swLTldKltLa10kJ2AiICE9IC4wIF07IHRoZW4KICAgICAgICAgICAgb3B0X3M9YGV4cHIgJG9wdF9zIDogJ1woWzAtOV0qXClbS2tdJCdgCiAgICAgICAgICAgIG9wdF9zPWBleHByICRvcHRfcyBcKiAxMDI0YAogICAgICAgIGVsaWYgWyAiLmBleHByICRvcHRfcyA6ICdbMC05XSpbTW1dJCdgIiAhPSAuMCBdOyB0aGVuCiAgICAgICAgICAgIG9wdF9zPWBleHByICRvcHRfcyA6ICdcKFswLTldKlwpW01tXSQnYAogICAgICAgICAgICBvcHRfcz1gZXhwciAkb3B0X3MgXCogMTA0ODU3NmAgIyAxMDI0KjEwMjQKICAgICAgICBlbGlmIFsgIi5gZXhwciAkb3B0X3MgOiAnWzAtOV0qW0dnXSQnYCIgIT0gLjAgXTsgdGhlbgogICAgICAgICAgICBvcHRfcz1gZXhwciAkb3B0X3MgOiAnXChbMC05XSpcKVtHZ10kJ2AKICAgICAgICAgICAgb3B0X3M9YGV4cHIgJG9wdF9zIFwqIDEwNzM3NDE4MjRgICMgMTAyNCoxMDI0KjEwMjQKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgYXJndW1lbnQgXGAkb3B0X3MnIHRvIG9wdGlvbiAtcy4iIDE+JjIKICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgIGZpCiAgICBmaQoKICAgICMgICBvcHRpb24gLWQvLXogY29uc2lzdGVuY3kKICAgIGlmIFsgIi4kb3B0X2QiID0gLnllcyBdICYmIFsgIi4kb3B0X3oiID0gLiBdOyB0aGVuCiAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogb3B0aW9uIC1kIHJlcXVpcmVzIG9wdGlvbiAtei4iIDE+JjIKICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICBmaQoKICAgICMgICBtYWtlIHN1cmUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMKICAgIGlmIFsgIi4kb3B0X2EiICE9IC4gXTsgdGhlbgogICAgICAgIGlmIFsgISAtZCAkb3B0X2EgXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJG9wdF9mIiA9IC5ubyBdOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBhcmNoaXZlIGRpcmVjdG9yeSBcYCRvcHRfYScgZG9lcyBub3QgZXhpc3QuIiAxPiYyCiAgICAgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIG1rZGlyICRvcHRfYSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICBjaG1vZCA3NTUgJG9wdF9hCiAgICAgICAgZmkKICAgICAgICBpZiBbICEgLXcgJG9wdF9hIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogYXJjaGl2ZSBkaXJlY3RvcnkgXGAkb3B0X2EnIG5vdCB3cml0YWJsZS4iIDE+JjIKICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgIGZpCiAgICBmaQoKICAgICMgICBkZXRlcm1pbmUgY29tcHJlc3Npb24gYXBwcm9hY2gKICAgIGlmIFsgIi4kb3B0X3oiICE9IC4gXTsgdGhlbgogICAgICAgIGNvbXBfbHZsPSIkb3B0X3oiCiAgICAgICAgY29tcF9wcmc9IiIKICAgICAgICBjYXNlICRjb21wX2x2bCBpbgogICAgICAgICAgICAqOiogKSBldmFsIGBlY2hvICRjb21wX2x2bCB8XAogICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MlXlwoLipcKTpcKC4qXCkkJWNvbXBfcHJnPSJcMSI7IGNvbXBfbHZsPSJcMiIlJ2AgOzsKICAgICAgICBlc2FjCgogICAgICAgICMgICBjb21wcmVzc2lvbiBsZXZlbCBjb25zaXN0ZW5jeQogICAgICAgIGNhc2UgJGNvbXBfbHZsIGluCiAgICAgICAgICAgIFswLTldICkKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICogKSBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsIFxgJGNvbXBfbHZsJyIgMT4mMgogICAgICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCgogICAgICAgICMgICBkZXRlcm1pbmUgYSBzdWl0YWJsZSBjb21wcmVzc2lvbiB0b29sCiAgICAgICAgaWYgWyAiLiRjb21wX3ByZyIgPSAuIF07IHRoZW4KICAgICAgICAgICAgIyAgIGNoZWNrIHdoZXRoZXIgdGhlIHRlc3QgY29tbWFuZCBzdXBwb3J0cyB0aGUgLXggb3B0aW9uCiAgICAgICAgICAgIGlmIFsgLXggL2Jpbi9zaCBdIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBtaW51c3g9Ii14IgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBtaW51c3g9Ii1yIgogICAgICAgICAgICBmaQogICAgICAgICAgICAjICAgc2VhcmNoIGZvciB0b29scyBpbiAkUEFUSAogICAgICAgICAgICBwYXRocz0iYGVjaG8gJFBBVEggfFwKICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MlLyo6JTolZycgLWUgJ3MlLyokJSUnIFwKICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvXjovLjovJyAtZSAncy86Oi86LjovZycgLWUgJ3MvOiQvOi4vJyBcCiAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLzovIC9nJ2AiCiAgICAgICAgICAgIGZvciBwcmcgaW4gYnppcDIgZ3ppcCBjb21wcmVzczsgZG8KICAgICAgICAgICAgICAgIGZvciBwYXRoIGluICRwYXRoczsgZG8KICAgICAgICAgICAgICAgICAgICBpZiBbICRtaW51c3ggIiRwYXRoLyRwcmciIF0gJiYgWyAhIC1kICIkcGF0aC8kcHJnIiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBfcHJnPSIkcHJnIgogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICAgICBpZiBbICIuJGNvbXBfcHJnIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgZG9uZQogICAgICAgICAgICBpZiBbICIuJGNvbXBfcHJnIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogbm8gc3VpdGFibGUgY29tcHJlc3Npb24gdG9vbCBmb3VuZCBpbiBcJFBBVEgiIDE+JjIKICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICBmaQoKICAgICAgICAjICAgZGV0ZXJtaW5lIHN0YW5kYXJkIGNvbXByZXNzaW9uIGV4dGVuc2lvbgogICAgICAgICMgICBhbmQgbWFrZSBzdXJlIGl0IGlzIGEga25vd24gdG9vbAogICAgICAgIGNhc2UgJGNvbXBfcHJnIGluCiAgICAgICAgICAgICovYnppcDIgICAgfCBiemlwMiAgICApIGNvbXBfZXh0PSJiejIiIGNvbXBfbHZsPSItJGNvbXBfbHZsIiA7OwogICAgICAgICAgICAqL2d6aXAgICAgIHwgZ3ppcCAgICAgKSBjb21wX2V4dD0iZ3oiICBjb21wX2x2bD0iLSRjb21wX2x2bCIgOzsKICAgICAgICAgICAgKi9jb21wcmVzcyB8IGNvbXByZXNzICkgY29tcF9leHQ9IloiOyAgY29tcF9sdmw9IiIgICAgICAgICAgIDs7CiAgICAgICAgICAgICogKSBlY2hvICIkbXNncHJlZml4OkVycm9yOiB0b29sIFxgJGNvbXBfcHJnJyBpcyBub3QgYSBrbm93biBjb21wcmVzc2lvbiB0b29sIiAxPiYyCiAgICAgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICAgICAgICAgICAgICA7OwogICAgICAgIGVzYWMKICAgICAgICBjb21wX3N1Zj0iLiRjb21wX2V4dCIKICAgIGZpCgogICAgIyAgIGl0ZXJhdGUgb3ZlciBhbGwgZ2l2ZW4gbG9nZmlsZSBhcmd1bWVudHMKICAgIGZvciBmaWxlIGluICQqOyBkbwogICAgICAgICMgICBtYWtlIHN1cmUgdGhlIGxvZ2ZpbGUgZXhpc3RzCiAgICAgICAgaWYgWyAhIC1mICRmaWxlIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAiLiRvcHRfZiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGxvZ2ZpbGUgXGAkZmlsZScgbm90IGZvdW5kIiAxPiYyCiAgICAgICAgICAgIHNodG9vbF9leGl0IDEKICAgICAgICBmaQoKICAgICAgICAjICAgZGV0ZXJtaW5lIGxvZyBkaXJlY3RvcnkgKHdoZXJlIG9yaWdpbmFsIGxvZ2ZpbGUgaXMgcGxhY2VkKQogICAgICAgIGxkaXI9Ii4iCiAgICAgICAgY2FzZSAkZmlsZSBpbgogICAgICAgICAgICAqLyogKSBldmFsIGBlY2hvICRmaWxlIHwgc2VkIC1lICdzJV5cKC4qXCkvXChbXi9dKlwpJCVsZGlyPSJcMSI7IGZpbGU9IlwyIjslJ2AgOzsKICAgICAgICBlc2FjCgogICAgICAgICMgICBkZXRlcm1pbmUgYXJjaGl2ZSBkaXJlY3RvcnkgKHdoZXJlIHJvdGF0ZWQgbG9nZmlsZXMgYXJlIHBsYWNlZCkKICAgICAgICBhZGlyPSIkbGRpciIKICAgICAgICBpZiBbICIuJG9wdF9hIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgY2FzZSAiJG9wdF9hIiBpbgogICAgICAgICAgICAgICAgLyogfCAuLyogKSBhZGlyPSIkb3B0X2EiIDs7CiAgICAgICAgICAgICAgICAqICkgYWRpcj0iJGxkaXIvJG9wdF9hIiAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIGZpCgogICAgICAgICMgICBvcHRpb25hbGx5IHRha2UgbG9nZmlsZSBzaXplIGludG8gYWNjb3VudAogICAgICAgIGlmIFsgIi4kb3B0X3MiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAjICAgZGV0ZXJtaW5lIHNpemUgb2YgbG9nZmlsZQogICAgICAgICAgICBzZXQgLS0gYGVudiAtaSAvYmluL2xzIC1sICIkbGRpci8kZmlsZSIgfCBzZWQgLWUgInM7JGxkaXIvJGZpbGU7OyIgfFwKICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3M7IC0+IC4qJDs7JyAtZSAncztbIAldWyAJXSo7IDtnJ2AKICAgICAgICAgICAgbj1gZXhwciAkIyAtIDNgCiAgICAgICAgICAgIGV2YWwgInNpemU9XGBlY2hvIFwkeyRufVxgIgoKICAgICAgICAgICAgIyAgIHNraXAgbG9nZmlsZSBpZiBzaXplIGlzIHN0aWxsIHRvbyBzbWFsbAogICAgICAgICAgICBpZiBbICRzaXplIC1sdCAkb3B0X3MgXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICIkbGRpci8kZmlsZTogc3RpbGwgdG9vIHNtYWxsIGluIHNpemUgLS0gc2tpcHBpbmciCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgZmkKICAgICAgICBmaQoKICAgICAgICAjICAgdmVyYm9zaXR5CiAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgZWNobyAicm90YXRpbmcgJGxkaXIvJGZpbGUiCiAgICAgICAgZmkKCiAgICAgICAgIyAgIGV4ZWN1dGUgcHJvbG9nCiAgICAgICAgaWYgWyAiLiRvcHRfUCIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICIkb3B0X1AiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGV2YWwgJG9wdF9QCiAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBzaHRvb2xfZXhpdCAkPwogICAgICAgIGZpCgogICAgICAgICMgICBraWNrIGF3YXkgb3V0LXJvdGF0ZWQgbG9nZmlsZQogICAgICAgIG49YGV4cHIgJG9wdF9uIC0gMWAKICAgICAgICBuPWBlY2hvIGR1bW15IHwgYXdrICJ7IHByaW50ZihcIiUwJHtvcHRfcH1kXCIsIG4pOyB9IiBuPSRuYAogICAgICAgIGlmIFsgLWYgIiR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0iIF07IHRoZW4KICAgICAgICAgICAgIyAgIG9wdGlvbmFsbHkgbWlncmF0ZSBhd2F5IHRoZSBvdXQtcm90YXRlZCBsb2dmaWxlCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X00iICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICIkb3B0X00gJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBldmFsICIkb3B0X00gJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSIKICAgICAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICBmaQogICAgICAgICAgICAjICAgZmluYWxseSBnZXQgcmlkIG9mIHRoZSBvdXQtcm90YXRlZCBsb2dmaWxlCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICJybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IgogICAgICAgICAgICBmaQogICAgICAgICAgICBybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgZmkKCiAgICAgICAgIyAgIHJvdGF0ZSBhbHJlYWR5IGFyY2hpdmVkIGxvZ2ZpbGVzCiAgICAgICAgd2hpbGUgWyAkbiAtZ3QgMCBdOyBkbwogICAgICAgICAgICBtPSRuCiAgICAgICAgICAgIG49YGV4cHIgJG4gLSAxYAogICAgICAgICAgICBuPWBlY2hvIGR1bW15IHwgYXdrICJ7IHByaW50ZihcIiUwJHtvcHRfcH1kXCIsIG4pOyB9IiBuPSRuYAogICAgICAgICAgICBpZiBbICRuIC1lcSAwIF0gJiYgWyAiLiRvcHRfZCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICMgICBzcGVjaWFsIGNhc2U6IGZpcnN0IHJvdGF0aW9uIGZpbGUgdW5kZXIgZGVsYXllZCBjb21wcmVzc2lvbiBzaXR1YXRpb24KICAgICAgICAgICAgICAgIGlmIFsgISAtZiAiJHthZGlyfS8ke2ZpbGV9LiR7bn0iIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZmkKCiAgICAgICAgICAgICAgICAjICAgY29tcHJlc3MgZmlsZSAoZGVsYXllZCkKICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X2IiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAibXYgJHthZGlyfS8ke2ZpbGV9LiR7bn0gJHthZGlyfS8ke2ZpbGV9LiR7bX0iCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBtdiAke2FkaXJ9LyR7ZmlsZX0uJHtufSAke2FkaXJ9LyR7ZmlsZX0uJHttfSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIigke2NvbXBfcHJnfSAke2NvbXBfbHZsfSA8JHthZGlyfS8ke2ZpbGV9LiR7bX0gPiR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn07IHJtIC1mICR7YWRpcn0vJHtmaWxlfS4ke219KSAmIgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgKCAke2NvbXBfcHJnfSAke2NvbXBfbHZsfSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgPCR7YWRpcn0vJHtmaWxlfS4ke219IFwKICAgICAgICAgICAgICAgICAgICAgICAgICA+JHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICAgICAgICAgICAgcm0gLWYgJHthZGlyfS8ke2ZpbGV9LiR7bX0gfHwgc2h0b29sX2V4aXQgJD8KICAgICAgICAgICAgICAgICAgICApIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIke2NvbXBfcHJnfSAke2NvbXBfbHZsfSA8JHthZGlyfS8ke2ZpbGV9LiR7bn0gPiR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0iCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICAke2NvbXBfcHJnfSAke2NvbXBfbHZsfSBcCiAgICAgICAgICAgICAgICAgICAgICAgIDwke2FkaXJ9LyR7ZmlsZX0uJHtufSBcCiAgICAgICAgICAgICAgICAgICAgICAgID4ke2FkaXJ9LyR7ZmlsZX0uJHttfSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAicm0gLWYgJHthZGlyfS8ke2ZpbGV9LiR7bn0iCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHtufSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICAgICAgZmkKCiAgICAgICAgICAgICAgICAjICAgZml4IGZpbGUgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfbyIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hvd24gJG9wdF9vICR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0iCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBjaG93biAkb3B0X28gJHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X2ciICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImNoZ3JwICRvcHRfZyAke2FkaXJ9LyR7ZmlsZX0uJHttfSR7Y29tcF9zdWZ9IgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgY2hncnAgJG9wdF9nICR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0gfHwgc2h0b29sX2V4aXQgJD8KICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF9tIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG1vZCAkb3B0X20gJHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSIKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIGNobW9kICRvcHRfbSAke2FkaXJ9LyR7ZmlsZX0uJHttfSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAjICAgc3RhbmRhcmQgY2FzZTogc2Vjb25kIGFuZCBmb2xsb3dpbmcgcm90YXRpb24gZmlsZQogICAgICAgICAgICAgICAgaWYgWyAhIC1mICIke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGVjaG8gIm12ICR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0gJHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBtdiAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9ICR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0gfHwgc2h0b29sX2V4aXQgJD8KICAgICAgICAgICAgZmkKICAgICAgICBkb25lCgogICAgICAgICMgICBtb3ZlIGF3YXkgY3VycmVudCBsb2dmaWxlCiAgICAgICAgaWYgWyAiLiRvcHRfYyIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgIyAgIGFwcHJvYWNoOiBjb3B5Wyt0cnVuY2F0ZV0KICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gImNwIC1wICR7bGRpcn0vJHtmaWxlfSAke2FkaXJ9LyR7ZmlsZX0uJHtufSIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgY3AgLXAgJHtsZGlyfS8ke2ZpbGV9ICR7YWRpcn0vJHtmaWxlfS4ke259IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgIGlmIFsgIi4kb3B0X3IiID0gLm5vIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNobyAiY3AgL2Rldi9udWxsICR7bGRpcn0vJHtmaWxlfSIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBjcCAvZGV2L251bGwgJHtsZGlyfS8ke2ZpbGV9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgIGZpCiAgICAgICAgZWxzZQogICAgICAgICAgICAjICAgYXBwcm9hY2g6IG1vdmVbK3RvdWNoXQogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAibXYgJHtsZGlyfS8ke2ZpbGV9ICR7YWRpcn0vJHtmaWxlfS4ke259IgogICAgICAgICAgICBmaQogICAgICAgICAgICBtdiAke2xkaXJ9LyR7ZmlsZX0gJHthZGlyfS8ke2ZpbGV9LiR7bn0gfHwgc2h0b29sX2V4aXQgJD8KICAgICAgICAgICAgaWYgWyAiLiRvcHRfciIgPSAubm8gXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICJ0b3VjaCAke2xkaXJ9LyR7ZmlsZX0iCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgdG91Y2ggJHtsZGlyfS8ke2ZpbGV9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgICAgICAjICAgZml4IGZpbGUgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfbyIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hvd24gJG9wdF9vICR7bGRpcn0vJHtmaWxlfSIKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIGNob3duICRvcHRfbyAke2xkaXJ9LyR7ZmlsZX0gfHwgc2h0b29sX2V4aXQgJD8KICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF9nIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaGdycCAkb3B0X2cgJHtsZGlyfS8ke2ZpbGV9IgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgY2hncnAgJG9wdF9nICR7bGRpcn0vJHtmaWxlfSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X20iICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImNobW9kICRvcHRfbSAke2xkaXJ9LyR7ZmlsZX0iCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBjaG1vZCAkb3B0X20gJHtsZGlyfS8ke2ZpbGV9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmaQogICAgICAgIGZpCgogICAgICAgICMgICByZWd1bGFyIGNvbXByZXNzaW9uIHN0ZXAKICAgICAgICBpZiBbICIuJG9wdF96IiAhPSAuIF0gJiYgWyAiLiRvcHRfZCIgPSAubm8gXTsgdGhlbgogICAgICAgICAgICAjICAgY29tcHJlc3MgZmlsZQogICAgICAgICAgICBpZiBbICIuJG9wdF9iIiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICIoJHtjb21wX3ByZ30gJHtjb21wX2x2bH0gPCR7YWRpcn0vJHtmaWxlfS4ke259ID4ke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9OyBybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHtufSkgJiIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAoICR7Y29tcF9wcmd9ICR7Y29tcF9sdmx9IFwKICAgICAgICAgICAgICAgICAgICAgIDwke2FkaXJ9LyR7ZmlsZX0uJHtufSBcCiAgICAgICAgICAgICAgICAgICAgICA+JHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICAgICAgICBybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHtufSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICAgICAgKSA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNobyAiJHtjb21wX3ByZ30gJHtjb21wX2x2bH0gPCR7YWRpcn0vJHtmaWxlfS4ke259ID4ke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IgogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICR7Y29tcF9wcmd9ICR7Y29tcF9sdmx9IFwKICAgICAgICAgICAgICAgICAgICA8JHthZGlyfS8ke2ZpbGV9LiR7bn0gXAogICAgICAgICAgICAgICAgICAgID4ke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGVjaG8gInJtIC1mICR7b3B0X2F9JHtmaWxlfS4ke259IgogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIHJtIC1mICR7YWRpcn0vJHtmaWxlfS4ke259IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgIGZpCgogICAgICAgICAgICAjICAgZml4IGZpbGUgYXR0cmlidXRlcwogICAgICAgICAgICBpZiBbICIuJG9wdF9vIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hvd24gJG9wdF9vICR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0iCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgY2hvd24gJG9wdF9vICR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0gfHwgc2h0b29sX2V4aXQgJD8KICAgICAgICAgICAgZmkKICAgICAgICAgICAgaWYgWyAiLiRvcHRfZyIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGVjaG8gImNoZ3JwICRvcHRfZyAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IgogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGNoZ3JwICRvcHRfZyAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X20iICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG1vZCAkb3B0X20gJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBjaG1vZCAkb3B0X20gJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPwogICAgICAgICAgICBmaQogICAgICAgIGZpCgogICAgICAgICMgICBleGVjdXRlIGVwaWxvZwogICAgICAgIGlmIFsgIi4kb3B0X0UiICE9IC4gXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiJG9wdF9FIgogICAgICAgICAgICBmaQogICAgICAgICAgICBldmFsICRvcHRfRQogICAgICAgICAgICBbICQ/IC1uZSAwIF0gJiYgc2h0b29sX2V4aXQgJD8KICAgICAgICBmaQogICAgZG9uZQoKICAgIHNodG9vbF9leGl0IDAKICAgIDs7Cgp0YXJiYWxsICkKICAgICMjCiAgICAjIyAgdGFyYmFsbCAtLSBSb2xsIGRpc3RyaWJ1dGlvbiB0YXJiYWxscwogICAgIyMgIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CiAgICAjIwoKICAgIHNyY3M9IiQqIgoKICAgICMgICBjaGVjayB3aGV0aGVyIHRoZSB0ZXN0IGNvbW1hbmQgc3VwcG9ydHMgdGhlIC14IG9wdGlvbgogICAgaWYgWyAteCAvYmluL3NoIF0gMj4vZGV2L251bGw7IHRoZW4KICAgICAgICBtaW51c3g9Ii14IgogICAgZWxzZQogICAgICAgIG1pbnVzeD0iLXIiCiAgICBmaQoKICAgICMgICBmaW5kIHRoZSB0b29scwogICAgcGF0aHM9ImBlY2hvICRQQVRIIHxcCiAgICAgICAgICAgIHNlZCAtZSAncyUvKjolOiVnJyAtZSAncyUvKiQlJScgXAogICAgICAgICAgICAgICAgLWUgJ3MvXjovLjovJyAtZSAncy86Oi86LjovZycgLWUgJ3MvOiQvOi4vJyBcCiAgICAgICAgICAgICAgICAtZSAncy86LyAvZydgIgogICAgZm9yIHNwZWMgaW4gZmluZDpnZmluZCxmaW5kIHRhcjpndGFyLHRhciB0YXJkeTp0YXJkeSx0YXJjdXN0OyBkbwogICAgICAgIHByZz1gZWNobyAkc3BlYyB8IHNlZCAtZSAncy86LiokLy8nYAogICAgICAgIHRvb2xzPWBlY2hvICRzcGVjIHwgc2VkIC1lICdzL14uKjovLydgCiAgICAgICAgZXZhbCAicHJnXyR7cHJnfT0nJyIKICAgICAgICAjICAgaXRlcmF0ZSBvdmVyIHRvb2xzCiAgICAgICAgZm9yIHRvb2wgaW4gYGVjaG8gJHRvb2xzIHwgc2VkIC1lICdzLywvIC9nJ2A7IGRvCiAgICAgICAgICAgICMgICBpdGVyYXRlIG92ZXIgcGF0aHMKICAgICAgICAgICAgZm9yIHBhdGggaW4gJHBhdGhzOyBkbwogICAgICAgICAgICAgICAgaWYgWyAkbWludXN4ICIkcGF0aC8kdG9vbCIgXSAmJiBbICEgLWQgIiRwYXRoLyR0b29sIiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZXZhbCAicHJnXyR7cHJnfT1cIiRwYXRoLyR0b29sXCIiCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgZXZhbCAidmFsPVwkcHJnXyR7cHJnfSIKICAgICAgICAgICAgaWYgWyAiLiR2YWwiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkKICAgICAgICBkb25lCiAgICBkb25lCgogICAgIyAgIGV4cGFuZCBzb3VyY2UgcGF0aHMKICAgIGV4Y2x1ZGU9JycKICAgIGZvciBwYXQgaW4gYGVjaG8gJG9wdF9lIHwgc2VkICdzLywvIC9nJ2A7IGRvCiAgICAgICAgZXhjbHVkZT0iJGV4Y2x1ZGUgfCBncmVwIC12ICckcGF0JyIKICAgIGRvbmUKICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgZWNobyAiY3AgL2Rldi9udWxsICR0bXBmaWxlLmxzdCIgMT4mMgogICAgZmkKICAgIGNwIC9kZXYvbnVsbCAkdG1wZmlsZS5sc3QKICAgIGZvciBzcmMgaW4gJHNyY3M7IGRvCiAgICAgICAgaWYgWyAtZCAkc3JjIF07IHRoZW4KICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIihjZCAkc3JjICYmICRwcmdfZmluZCAuIC10eXBlIGYgLWRlcHRoIC1wcmludCkgfCBzZWQgLWUgJ3M6XlxcLlwkOjonIC1lICdzOl5cXC4vOjonIHwgY2F0ICRleGNsdWRlID4+JHRtcGZpbGUubHN0IiAxPiYyCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIChjZCAkc3JjICYmICRwcmdfZmluZCAuIC10eXBlIGYgLWRlcHRoIC1wcmludCkgfFwKICAgICAgICAgICAgc2VkIC1lICdzOl5cLiQ6OicgLWUgJ3M6XlwuLzo6JyB8IGV2YWwgY2F0ICRleGNsdWRlID4+JHRtcGZpbGUubHN0CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiZWNobyAkc3JjID4+JHRtcGZpbGUubHN0IiAxPiYyCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGVjaG8gJHNyYyA+PiR0bXBmaWxlLmxzdAogICAgICAgIGZpCiAgICBkb25lCiAgICBzb3J0IDwkdG1wZmlsZS5sc3QgPiR0bXBmaWxlLmxzdC5uCiAgICBtdiAkdG1wZmlsZS5sc3QubiAkdG1wZmlsZS5sc3QKICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCiAgICAgICAgY2F0ICR0bXBmaWxlLmxzdCB8IHNlZCAtZSAncy9eLyAgLycgMT4mMgogICAgZmkKCiAgICAjICAgZGV0ZXJtaW5lIHRhcmJhbGwgZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWUKICAgIGlmIFsgIi4kb3B0X28iICE9IC4gXTsgdGhlbgogICAgICAgIHRhcmZpbGU9IiRvcHRfbyIKICAgICAgICBpZiBbICIuJG9wdF9kIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgdGFybmFtZT0iJG9wdF9kIgogICAgICAgIGVsc2UKICAgICAgICAgICAgdGFybmFtZT1gZWNobyAkdGFyZmlsZSB8IHNlZCAtZSAncy9cLnRhci4qJC8vJyAtZSAnczsuKi9cKFteL10qXCkkO1wxOydgCiAgICAgICAgZmkKICAgIGVsc2UKICAgICAgICBpZiBbICIuJG9wdF9kIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgdGFybmFtZT0iJG9wdF9kIgogICAgICAgIGVsaWYgWyAtZCAiJGZyb20iIF07IHRoZW4KICAgICAgICAgICAgdGFybmFtZT1gZWNobyAkZnJvbSB8IHNlZCAtZSAnczsuKi9cKFteL10qXCkkO1wxOydgCiAgICAgICAgZWxzZQogICAgICAgICAgICB0YXJuYW1lPSJvdXQiCiAgICAgICAgZmkKICAgICAgICB0YXJmaWxlPSIkdGFybmFtZS50YXIiCiAgICBmaQoKICAgICMgICByb2xsIHRoZSB0YXJiYWxsCiAgICBjb21wcmVzcz0nJwogICAgaWYgWyAiLiRvcHRfYyIgIT0gLiBdOyB0aGVuCiAgICAgICAgY29tcHJlc3M9InwgJG9wdF9jIgogICAgZmkKICAgIGlmIFsgIi4kcHJnX3RhcmR5IiAhPSAuIF07IHRoZW4KICAgICAgICAjICAgdGhlIGVsZWdhbnQgaGFja2VycyB3YXkKICAgICAgICB0YXJkeV9vcHQ9Ii0tcHJlZml4PSR0YXJuYW1lIgogICAgICAgIHRhcmR5X29wdD0iJHRhcmR5X29wdCAtLXVzZXJfbnVtYmVyPTAgLS1ncm91cF9udW1iZXI9MCIgIyBzZWN1cml0eSEKICAgICAgICBpZiBbICIuJG9wdF91IiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgdGFyZHlfb3B0PSIkdGFyZHlfb3B0IC0tdXNlcl9uYW1lPSRvcHRfdSIKICAgICAgICBmaQogICAgICAgIGlmIFsgIi4kb3B0X2ciICE9IC4gXTsgdGhlbgogICAgICAgICAgICB0YXJkeV9vcHQ9IiR0YXJkeV9vcHQgLS1ncm91cF9uYW1lPSRvcHRfZyIKICAgICAgICBmaQogICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gImNhdCAkdG1wZmlsZS5sc3QgfCB4YXJncyAkcHJnX3RhciBjZiAtIHwgJHByZ190YXJkeSAkdGFyZHlfb3B0IHwgY2F0ICRjb21wcmVzcyA+JHRtcGZpbGUub3V0IiAxPiYyCiAgICAgICAgZmkKICAgICAgICBjYXQgJHRtcGZpbGUubHN0IHxcCiAgICAgICAgeGFyZ3MgJHByZ190YXIgY2YgLSB8XAogICAgICAgICRwcmdfdGFyZHkgJHRhcmR5X29wdCB8XAogICAgICAgIGV2YWwgY2F0ICRjb21wcmVzcyA+JHRtcGZpbGUub3V0CiAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiY3AgJHRtcGZpbGUub3V0ICR0YXJmaWxlIiAxPiYyCiAgICAgICAgZmkKICAgICAgICBjcCAkdG1wZmlsZS5vdXQgJHRhcmZpbGUKICAgIGVsc2UKICAgICAgICAjICB0aGUgcG9ydGFibGUgc3RhbmRhcmQgd2F5CiAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgZWNobyAibWtkaXIgJHRtcGRpci8kdGFybmFtZSIgMT4mMgogICAgICAgIGZpCiAgICAgICAgbWtkaXIgJHRtcGRpci8kdGFybmFtZSB8fCBzaHRvb2xfZXhpdCAxCiAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiY2F0ICR0bXBmaWxlLmxzdCB8IHhhcmdzICRwcmdfdGFyIGNmIC0gfCAoY2QgJHRtcGRpci8kdGFybmFtZSAmJiAkcHJnX3RhciB4ZiAtKSIgMT4mMgogICAgICAgIGZpCiAgICAgICAgY2F0ICR0bXBmaWxlLmxzdCB8XAogICAgICAgIHhhcmdzICRwcmdfdGFyIGNmIC0gfFwKICAgICAgICAoY2QgJHRtcGRpci8kdGFybmFtZSAmJiAkcHJnX3RhciB4ZiAtKQogICAgICAgIGlmIFsgIi4kb3B0X3UiICE9IC4gXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiY2hvd24gLVIgJG9wdF91ICR0bXBkaXIvJHRhcm5hbWUgPi9kZXYvbnVsbCAyPiYxIiAyPiYxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGNob3duIC1SICRvcHRfdSAkdG1wZGlyLyR0YXJuYW1lID4vZGV2L251bGwgMj4mMSB8fFwKICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiBjYW5ub3Qgc2V0IHVzZXIgbmFtZSBcYCRvcHRfdScgKHdvdWxkIHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzKSIKICAgICAgICBmaQogICAgICAgIGlmIFsgIi4kb3B0X2ciICE9IC4gXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiY2hncnAgLVIgJG9wdF9nICR0bXBkaXIvJHRhcm5hbWUgPi9kZXYvbnVsbCAyPiYxIiAyPiYxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGNoZ3JwIC1SICRvcHRfZyAkdG1wZGlyLyR0YXJuYW1lID4vZGV2L251bGwgMj4mMSB8fFwKICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiBjYW5ub3Qgc2V0IGdyb3VwIG5hbWUgXGAkb3B0X2cnICh3b3VsZCByZXF1aXJlIHJvb3QgcHJpdmlsZWdlcykiCiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBlY2hvICIoY2QgJHRtcGRpciAmJiAkcHJnX2ZpbmQgJHRhcm5hbWUgLXR5cGUgZiAtZGVwdGggLXByaW50IHwgc29ydCB8IHhhcmdzICRwcmdfdGFyIGNmIC0pIHwgY2F0ICRjb21wcmVzcyA+JHRtcGZpbGUub3V0IiAxPiYyCiAgICAgICAgZmkKICAgICAgICAoY2QgJHRtcGRpciAmJiAkcHJnX2ZpbmQgJHRhcm5hbWUgLXR5cGUgZiAtZGVwdGggLXByaW50IHwgc29ydCB8IHhhcmdzICRwcmdfdGFyIGNmIC0pIHxcCiAgICAgICAgZXZhbCBjYXQgJGNvbXByZXNzID4kdG1wZmlsZS5vdXQKICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBlY2hvICJjcCAkdG1wZmlsZS5vdXQgJHRhcmZpbGUiIDE+JjIKICAgICAgICBmaQogICAgICAgIGNwICR0bXBmaWxlLm91dCAkdGFyZmlsZQogICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gInJtIC1yZiAkdG1wZGlyLyR0YXJuYW1lIiAxPiYyCiAgICAgICAgZmkKICAgICAgICBybSAtcmYgJHRtcGRpci8kdGFybmFtZQogICAgZmkKCiAgICAjICAgY2xlYW51cAogICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICBlY2hvICJybSAtZiAkdG1wZmlsZS5sc3QgJHRtcGZpbGUub3V0IiAxPiYyCiAgICBmaQogICAgcm0gLWYgJHRtcGZpbGUubHN0ICR0bXBmaWxlLm91dAoKICAgIHNodG9vbF9leGl0IDAKICAgIDs7CgpzdWJzdCApCiAgICAjIwogICAgIyMgIHN1YnN0IC0tIEFwcGx5IHNlZCgxKSBzdWJzdGl0dXRpb24gb3BlcmF0aW9ucwogICAgIyMgIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CiAgICAjIwoKICAgICMgICByZW1lbWJlciBvcHRpb25hbCBsaXN0IG9mIGZpbGUocykKICAgIGZpbGVzPSIkKiIKICAgIGZpbGVzX251bT0iJCMiCgogICAgIyAgIHBhcmFtZXRlciBjb25zaXN0ZW5jeSBjaGVjawogICAgaWYgWyAkIyAtZXEgMCBdICYmIFsgIi4kb3B0X2IiICE9IC4gXTsgdGhlbgogICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IG9wdGlvbiAtYiBjYW5ub3QgYmUgYXBwbGllZCB0byBzdGRpbiIgMT4mMgogICAgICAgIHNodG9vbF9leGl0IDEKICAgIGZpCiAgICBpZiBbICQjIC1lcSAwIF0gJiYgWyAiLiRvcHRfcyIgPSAueWVzIF07IHRoZW4KICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBvcHRpb24gLXMgY2Fubm90IGJlIGFwcGxpZWQgdG8gc3RkaW4iIDE+JjIKICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICBmaQoKICAgICMgICBidWlsZCB1bmRlcmx5aW5nIHNlZCgxKSBjb21tYW5kCiAgICBzZWRjbWQ9J3NlZCcKICAgIGlmIFsgIi4kb3B0X2UiICE9IC4gXTsgdGhlbgogICAgICAgIE9JRlM9IiRJRlMiOyBJRlM9IiRBU0NfTkwiOyBzZXQgLS0gJG9wdF9lOyBJRlM9IiRPSUZTIgogICAgICAgIGZvciBlCiAgICAgICAgZG8KICAgICAgICAgICAgc2VkY21kPSIkc2VkY21kIC1lICckZSciCiAgICAgICAgZG9uZQogICAgZWxpZiBbICIuJG9wdF9mIiAhPSAuIF07IHRoZW4KICAgICAgICBpZiBbICEgLWYgJG9wdF9mIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogY29tbWFuZCBmaWxlIFxgJG9wdF9mJyBub3QgZm91bmQgb3Igbm90IGEgcmVndWxhciBmaWxlIiAxPiYyCiAgICAgICAgICAgIHNodG9vbF9leGl0IDEKICAgICAgICBmaQogICAgICAgIHNlZGNtZD0iJHNlZGNtZCAtZiAnJG9wdF9mJyIKICAgIGVsc2UKICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBlaXRoZXIgLWUgb3B0aW9uKHMpIG9yIC1mIG9wdGlvbiByZXF1aXJlZCIgMT4mMgogICAgICAgIHNodG9vbF9leGl0IDEKICAgIGZpCgogICAgIyAgIGRldGVybWluZSBleHRlbnNpb24gZm9yIG9yaWdpbmFsIGZpbGUKICAgIG9yaWc9Ii5vcmlnIgogICAgaWYgWyAiLiRvcHRfYiIgIT0gLiBdOyB0aGVuCiAgICAgICAgb3JpZz0iJG9wdF9iIgogICAgZmkKCiAgICAjICAgYXBwbHkgc2VkKDEpIG9wZXJhdGlvbihzKQogICAgaWYgWyAiLiRmaWxlcyIgIT0gLiBdOyB0aGVuCiAgICAgICAgIyAgIGFwcGx5IG9wZXJhdGlvbihzKSB0byBmaWxlcwogICAgICAgIHN1YnN0ZG9uZT1ubwogICAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KICAgICAgICAgICAgdGVzdCAiLiRmaWxlIiA9IC4gJiYgY29udGludWUKICAgICAgICAgICAgaWYgWyAhIC1mICRmaWxlIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6V2FybmluZzogZmlsZSBcYCRmaWxlJyBub3QgZm91bmQgb3Igbm90IGEgcmVndWxhciBmaWxlIiAxPiYyCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBmaQoKICAgICAgICAgICAgIyAgIGhhbmRsZSBpbnRlcmFjdGl2ZSBtb2RlCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X2kiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICBldmFsICIkc2VkY21kIDwkZmlsZSA+JGZpbGUubmV3IgogICAgICAgICAgICAgICAgc2tpcD1ubwogICAgICAgICAgICAgICAgaWYgY21wICRmaWxlICRmaWxlLm5ldyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICAgICAgICAgICAgICBybSAtZiAkZmlsZS5uZXcKICAgICAgICAgICAgICAgICAgICBza2lwPXllcwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIChkaWZmIC1VMSAkZmlsZSAkZmlsZS5uZXcgPiR0bXBmaWxlKSAyPi9kZXYvbnVsbAogICAgICAgICAgICAgICAgICAgIGlmIFsgIi5gY2F0ICR0bXBmaWxlYCIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgKGRpZmYgLUMxICRmaWxlICRmaWxlLm5ldyA+JHRtcGZpbGUpIDI+L2Rldi9udWxsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi5gY2F0ICR0bXBmaWxlYCIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6V2FybmluZzogdW5hYmxlIHRvIHNob3cgZGlmZmVyZW5jZSBmb3IgZmlsZSBcYCRmaWxlJyIgMT4mMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3AgL2Rldi9udWxsICR0bXBmaWxlCiAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBybSAtZiAkZmlsZS5uZXcKICAgICAgICAgICAgICAgICAgICBjYXQgJHRtcGZpbGUKICAgICAgICAgICAgICAgICAgICBlY2hvIGR1bW15IHwgYXdrICd7IHByaW50ZigiJXMiLCBURVhUKTsgfScgVEVYVD0iPj4+IEFwcGx5IFtZL25dOiAiCiAgICAgICAgICAgICAgICAgICAgcmVhZCBpbnB1dAogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kaW5wdXQiICE9IC5ZIF0gJiZcCiAgICAgICAgICAgICAgICAgICAgICAgWyAiLiRpbnB1dCIgIT0gLnkgXSAmJlwKICAgICAgICAgICAgICAgICAgICAgICBbICIuJGlucHV0IiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICBza2lwPXllcwogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgaWYgWyAiLiRza2lwIiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImZpbGUgXGAkZmlsZScgLS0gc2tpcHBlZCIgMT4mMgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICAjICAgYXBwbHkgc2VkKDEpIG9wZXJhdGlvbihzKQogICAgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAicGF0Y2hpbmcgXGAkZmlsZSciIDE+JjIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIlwkIGNwIC1wICRmaWxlICRmaWxlJG9yaWciCiAgICAgICAgICAgICAgICBlY2hvICJcJCBjaG1vZCB1K3cgJGZpbGUiCiAgICAgICAgICAgICAgICBlY2hvICJcJCAkc2VkY21kIDwkZmlsZSRvcmlnID4kZmlsZSIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgaWYgWyAiLiRvcHRfbiIgPSAubm8gXTsgdGhlbgogICAgICAgICAgICAgICAgY3AgLXAgJGZpbGUgJGZpbGUkb3JpZwogICAgICAgICAgICAgICAgY2htb2QgdSt3ICRmaWxlID4vZGV2L251bGwgMj4mMSB8fCB0cnVlCiAgICAgICAgICAgICAgICBldmFsICIkc2VkY21kIDwkZmlsZSRvcmlnID4kZmlsZSIKICAgICAgICAgICAgZmkKCiAgICAgICAgICAgICMgICBvcHRpb25hbGx5IGZpeCB0aW1lc3RhbXAKICAgICAgICAgICAgaWYgWyAiLiRvcHRfcyIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZWNobyAiXCQgdG91Y2ggLXIgJGZpbGUkb3JpZyAkZmlsZSIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF9uIiA9IC5ubyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgdG91Y2ggLXIgJGZpbGUkb3JpZyAkZmlsZQogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgZmkKCiAgICAgICAgICAgICMgICBvcHRpb25hbGx5IGNoZWNrIHdoZXRoZXIgYW55IGNvbnRlbnQgY2hhbmdlIGFjdHVhbGx5IG9jY3VycmVkCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X3EiID0gLm5vIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIGNtcCAkZmlsZSRvcmlnICRmaWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3ciID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6V2FybmluZzogc3Vic3RpdHV0aW9uIHJlc3VsdGVkIGluIG5vIGNvbnRlbnQgY2hhbmdlIG9uIGZpbGUgXCIkZmlsZVwiIiAxPiYyCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdWJzdGRvbmU9eWVzCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmaQoKICAgICAgICAgICAgIyAgIG9wdGlvbmFsbHkgcmVtb3ZlIHByZXNlcnZlZCBvcmlnaW5hbCBmaWxlCiAgICAgICAgICAgIGlmIFsgIi4kb3B0X2IiID0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGVjaG8gIlwkIHJtIC1mICRmaWxlJG9yaWciCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfbiIgPSAubm8gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIHJtIC1mICRmaWxlJG9yaWcKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgICAgIGlmIFsgIi4kb3B0X3EiID0gLm5vIF0gJiYgWyAiLiRvcHRfdyIgPSAubm8gXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJHN1YnN0ZG9uZSIgPSAubm8gXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiLiRmaWxlc19udW0iID0gLjEgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6V2FybmluZzogc3Vic3RpdHV0aW9uIHJlc3VsdGVkIGluIG5vIGNvbnRlbnQgY2hhbmdlIG9uIGZpbGUgXCIkZmlsZVwiIiAxPiYyCiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiBzdWJzdGl0dXRpb24gcmVzdWx0ZWQgaW4gbm8gY29udGVudCBjaGFuZ2Ugb24gYW55IGZpbGUiIDE+JjIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKICAgIGVsc2UKICAgICAgICAjICAgYXBwbHkgb3BlcmF0aW9uKHMpIHRvIHN0ZGluL3N0ZG91dAogICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gInBhdGNoaW5nIDxzdGRpbj4iIDE+JjIKICAgICAgICBmaQogICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIlwkICRzZWRjbWQiCiAgICAgICAgZmkKICAgICAgICBpZiBbICIuJG9wdF9uIiA9IC5ubyBdOyB0aGVuCiAgICAgICAgICAgIGV2YWwgIiRzZWRjbWQiCiAgICAgICAgZmkKICAgIGZpCgogICAgc2h0b29sX2V4aXQgMAogICAgOzsKCnBsYXRmb3JtICkKICAgICMjCiAgICAjIyAgcGxhdGZvcm0gLS0gUGxhdGZvcm0gSWRlbnRpZmljYXRpb24gVXRpbGl0eQogICAgIyMgIENvcHlyaWdodCAoYykgMjAwMy0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CiAgICAjIwoKICAgICMgICBvcHRpb24gcG9zdC1wcm9jZXNzaW5nCiAgICBpZiBbICIuJG9wdF90IiAhPSAuIF07IHRoZW4KICAgICAgICBjYXNlICIkb3B0X3QiIGluCiAgICAgICAgICAgIGJpbmFyeSApCiAgICAgICAgICAgICAgICAjICAgYmluYXJ5IHBhY2thZ2UgaWQgKE9wZW5QS0cgUlBNKQogICAgICAgICAgICAgICAgb3B0X0Y9IiU8YXA+LSU8c3A+IgogICAgICAgICAgICAgICAgb3B0X0w9eWVzCiAgICAgICAgICAgICAgICBvcHRfUz0iIgogICAgICAgICAgICAgICAgb3B0X0M9IisiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBidWlsZCApCiAgICAgICAgICAgICAgICAjICAgYnVpbGQgdGltZSBjaGVja2luZyAoT3BlblBLRyBSUE0pCiAgICAgICAgICAgICAgICBvcHRfRj0iJTxhdD4tJTxzdD4iCiAgICAgICAgICAgICAgICBvcHRfTD15ZXMKICAgICAgICAgICAgICAgIG9wdF9TPSIiCiAgICAgICAgICAgICAgICBvcHRfQz0iKyIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGdudSApCiAgICAgICAgICAgICAgICAjICAgR05VIGNvbmZpZy5ndWVzcyBzdHlsZSA8YXJjaD4tPHZlbmRvcj4tPG9zPjxvc3ZlcnNpb24+CiAgICAgICAgICAgICAgICBvcHRfRj0iJTxhdD4tdW5rbm93bi0lPHN0PiIKICAgICAgICAgICAgICAgIG9wdF9MPXllcwogICAgICAgICAgICAgICAgb3B0X1M9IiIKICAgICAgICAgICAgICAgIG9wdF9DPSIrIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgd2ViICkKICAgICAgICAgICAgICAgICMgICBub24td2hpdGVzcGFjZSBIVFRQIFNlcnZlci1oZWFkZXIgaWQKICAgICAgICAgICAgICAgIG9wdF9GPSIlPHNwPi0lPGFwPiIKICAgICAgICAgICAgICAgIG9wdF9TPSIvIgogICAgICAgICAgICAgICAgb3B0X0M9IisiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBzdW1tYXJ5KQogICAgICAgICAgICAgICAgIyAgIGh1bWFuIHJlYWRhYmxlIHZlcmJvc2Ugc3VtbWFyeSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgb3B0X0Y9IkNsYXNzOiAgICAgICVbc2NdICglW2FjXSlcXG5Qcm9kdWN0OiAgICAlW3NwXSAoJVthcF0pXFxuVGVjaG5vbG9neTogJVtzdF0gKCVbYXRdKSIKICAgICAgICAgICAgICAgIG9wdF9TPSIgIgogICAgICAgICAgICAgICAgb3B0X0M9Ii8iCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBhbGwtaW4tb25lICkKICAgICAgICAgICAgICAgICMgICBmdWxsLXRhYmxlIGFsbC1pbi1vbmUgaW5mb3JtYXRpb24KICAgICAgICAgICAgICAgIG9wdF9GPSIiCiAgICAgICAgICAgICAgICBvcHRfRj0iJHtvcHRfRn1jb25jaXNlIGFyY2hpdGVjdHVyZSBjbGFzczogICAgICAlPGFjPlxcbiIKICAgICAgICAgICAgICAgIG9wdF9GPSIke29wdF9GfXJlZ3VsYXIgYXJjaGl0ZWN0dXJlIGNsYXNzOiAgICAgICV7YWN9XFxuIgogICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBhcmNoaXRlY3R1cmUgY2xhc3M6ICAgICAgJVthY11cXG4iCiAgICAgICAgICAgICAgICBvcHRfRj0iJHtvcHRfRn1jb25jaXNlIGFyY2hpdGVjdHVyZSBwcm9kdWN0OiAgICAlPGFwPlxcbiIKICAgICAgICAgICAgICAgIG9wdF9GPSIke29wdF9GfXJlZ3VsYXIgYXJjaGl0ZWN0dXJlIHByb2R1Y3Q6ICAgICV7YXB9XFxuIgogICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBhcmNoaXRlY3R1cmUgcHJvZHVjdDogICAgJVthcF1cXG4iCiAgICAgICAgICAgICAgICBvcHRfRj0iJHtvcHRfRn1jb25jaXNlIGFyY2hpdGVjdHVyZSB0ZWNobm9sb2d5OiAlPGF0PlxcbiIKICAgICAgICAgICAgICAgIG9wdF9GPSIke29wdF9GfXJlZ3VsYXIgYXJjaGl0ZWN0dXJlIHRlY2hub2xvZ3k6ICV7YXR9XFxuIgogICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBhcmNoaXRlY3R1cmUgdGVjaG5vbG9neTogJVthdF1cXG4iCiAgICAgICAgICAgICAgICBvcHRfRj0iJHtvcHRfRn1jb25jaXNlIHN5c3RlbSBjbGFzczogICAgICAgICAgICAlPHNjPlxcbiIKICAgICAgICAgICAgICAgIG9wdF9GPSIke29wdF9GfXJlZ3VsYXIgc3lzdGVtIGNsYXNzOiAgICAgICAgICAgICV7c2N9XFxuIgogICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBzeXN0ZW0gY2xhc3M6ICAgICAgICAgICAgJVtzY11cXG4iCiAgICAgICAgICAgICAgICBvcHRfRj0iJHtvcHRfRn1jb25jaXNlIHN5c3RlbSBwcm9kdWN0OiAgICAgICAgICAlPHNwPlxcbiIKICAgICAgICAgICAgICAgIG9wdF9GPSIke29wdF9GfXJlZ3VsYXIgc3lzdGVtIHByb2R1Y3Q6ICAgICAgICAgICV7c3B9XFxuIgogICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBzeXN0ZW0gcHJvZHVjdDogICAgICAgICAgJVtzcF1cXG4iCiAgICAgICAgICAgICAgICBvcHRfRj0iJHtvcHRfRn1jb25jaXNlIHN5c3RlbSB0ZWNobm9sb2d5OiAgICAgICAlPHN0PlxcbiIKICAgICAgICAgICAgICAgIG9wdF9GPSIke29wdF9GfXJlZ3VsYXIgc3lzdGVtIHRlY2hub2xvZ3k6ICAgICAgICV7c3R9XFxuIgogICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBzeXN0ZW0gdGVjaG5vbG9neTogICAgICAgJVtzdF0iCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAqICkKICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgdHlwZSBcYCRvcHRfdCciIDE+JjIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICBmaQoKICAgICMgICBhc3NlbWJsZSBpbml0aWFsIHBsYXRmb3JtIGluZm9ybWF0aW9uCiAgICBVTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fFwKICAgIFVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgIHx8XAogICAgVU5BTUVfTUFDSElORT0ndW5rbm93bicKICAgIFVOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8XAogICAgVU5BTUVfU1lTVEVNPSd1bmtub3duJwogICAgVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHxcCiAgICBVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fFwKICAgIFVOQU1FX1JFTEVBU0U9J3Vua25vd24nCgogICAgVU5BTUU9IiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX0iCgogICAgQUM9IiI7IEFQPSIiOyBBVD0iIgogICAgU0M9IiI7IFNQPSIiOyBTVD0iIgoKICAgICMgICAgZGlzcGF0Y2ggaW50byBwbGF0Zm9ybSBzcGVjaWZpYyBzZWN0aW9ucwogICAgY2FzZSAiJHtVTkFNRX0iIGluCgogICAgICAgICMgICBGcmVlQlNECiAgICAgICAgKjpGcmVlQlNEOiogKQogICAgICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZQogICAgICAgICAgICBBQz0iJHtVTkFNRV9NQUNISU5FfSIKICAgICAgICAgICAgY2FzZSAiJHtBQ30iIGluCiAgICAgICAgICAgICAgICBpMzg2ICkgQUM9ImlYODYiIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgQVA9IiR7QUN9IgogICAgICAgICAgICBBVD0iJHtBUH0iCiAgICAgICAgICAgIGlmIFsgIi4ke0FUfSIgPSAiLmlYODYiIF07IHRoZW4KICAgICAgICAgICAgICAgIGNhc2UgImAoL3NiaW4vc3lzY3RsIC1uIGh3Lm1vZGVsKSAyPiYxYCIgaW4KICAgICAgICAgICAgICAgICAgICAqIlhlb24iKiB8ICoiUGVudGl1bSBQcm8iKiB8ICoiQ3lyaXggNng4Nk1YIiogfCAqIlBlbnRpdW0gSUkiKiB8ICoiUGVudGl1bSBJSUkiKiB8ICoiUGVudGl1bSA0IiogfCAqIkNlbGVyb24iKiApIEFUPSJpNjg2IiA7OwogICAgICAgICAgICAgICAgICAgICoiUGVudGl1bSIqICkgQVQ9Imk1ODYiIDs7ICoiaTQ4NltTRF1YIiogfCAqIkN5cml4IDQ4NiIqIHwgKiJDeXJpeCBbNTZdeDg2IiogfCAqIkJsdWUgTGlnaHRuaW5nIiB8ICoiQ3lyaXggNDg2Uy9EWCIgKSBBVD0iaTQ4NiIgOzsKICAgICAgICAgICAgICAgICAgICAqImkzODZbU0RdWCIqIHwgKiJOZXhHZW4gNTg2IiogKSBBVD0iaTM4NiIgOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgZmkKICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KICAgICAgICAgICAgcj1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfFwKICAgICAgICAgICAgICAgc2VkIC1lICdzO1soKV07OycgLWUgJ3MvXCgtLipcKSQvW1wxXS8nYAogICAgICAgICAgICBTVD0iRnJlZUJTRCAke3J9IgogICAgICAgICAgICBTUD0iJHtTVH0iCiAgICAgICAgICAgIGNhc2UgIiR7cn0iIGluCiAgICAgICAgICAgICAgICAxLiogKSBTQz0iNC4zQlNEIiA7OwogICAgICAgICAgICAgICAgKiAgICkgU0M9IjQuNEJTRCIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICA7OwoKICAgICAgICAjICAgTmV0QlNECiAgICAgICAgKjpOZXRCU0Q6KiApCiAgICAgICAgICAgICMgICBkZXRlcm1pbmUgYXJjaGl0ZWN0dXJlCiAgICAgICAgICAgIEFUPSIke1VOQU1FX01BQ0hJTkV9IgogICAgICAgICAgICBBUD0iJHtBVH0iCiAgICAgICAgICAgIGNhc2UgIiR7QVB9IiBpbgogICAgICAgICAgICAgICAgaVszLTZdODYgKSBBUD0iaVg4NiIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBBQz0iJHtBUH0iCiAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCiAgICAgICAgICAgIHI9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1lICdzL1woWy1fXS4qXCkkL1tcMV0vJ2AKICAgICAgICAgICAgU1Q9Ik5ldEJTRCAke3J9IgogICAgICAgICAgICBTUD0iJHtTVH0iCiAgICAgICAgICAgIGNhc2UgIiR7cn0iIGluCiAgICAgICAgICAgICAgICAwLiogKSBTQz0iNC4zQlNEIiA7OwogICAgICAgICAgICAgICAgKiAgICkgU0M9IjQuNEJTRCIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICA7OwoKICAgICAgICAjICAgT3BlbkJTRAogICAgICAgICo6T3BlbkJTRDoqICkKICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKICAgICAgICAgICAgQVQ9IiR7VU5BTUVfTUFDSElORX0iCiAgICAgICAgICAgIEFQPSIke0FUfSIKICAgICAgICAgICAgY2FzZSAiJHtBUH0iIGluCiAgICAgICAgICAgICAgICBpWzMtNl04NiApIEFQPSJpWDg2IiA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIEFDPSIke0FQfSIKICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KICAgICAgICAgICAgcj1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLWUgJ3MvXChbLV9dLipcKSQvW1wxXS8nYAogICAgICAgICAgICBTVD0iT3BlbkJTRCAke3J9IgogICAgICAgICAgICBTUD0iJHtTVH0iCiAgICAgICAgICAgIFNDPSI0LjRCU0QiCiAgICAgICAgICAgIDs7CgogICAgICAgICMgICBHTlUvTGludXgKICAgICAgICAqOkxpbnV4OiogKQogICAgICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZQogICAgICAgICAgICBBVD0iJHtVTkFNRV9NQUNISU5FfSIKICAgICAgICAgICAgY2FzZSAiJHtBVH0iIGluCiAgICAgICAgICAgICAgIGlhNjQgICAgICkgQVQ9IklBNjQiICAgOzsKICAgICAgICAgICAgICAgeDg2XzY0ICAgKSBBVD0nQU1ENjQnICA7OwogICAgICAgICAgICAgICBwYXJpc2MgICApIEFUPSJIUFBBMzIiIDs7CiAgICAgICAgICAgICAgIHBhcmlzYzY0ICkgQVQ9IkhQUEE2NCIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBBUD0iJHtBVH0iCiAgICAgICAgICAgIGNhc2UgIiR7QVB9IiBpbgogICAgICAgICAgICAgICBpWzMtNl04NiApIEFQPSdpWDg2JyA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIEFDPSIke0FQfSIKICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KICAgICAgICAgICAgdl9rZXJuPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8XAogICAgICAgICAgICAgICAgc2VkIC1lICdzL15cKFswLTldWzAtOV0qXC5bMC05XVswLTldKlwpLiovXDEvJ2AKICAgICAgICAgICAgdl9saWJjPWAoc3RyaW5ncyAvbGliL2xpYmMuc28uKiB8IGdyZXAgJ15HTElCQ18nIHwgc2VkIC1lICdzL15HTElCQ18vLycgfFwKICAgICAgICAgICAgICAgIGVudiAtaSBzb3J0IC1uIHwgc2VkIC1uIC1lICckcCcgfCBzZWQgLWUgJ3MvXlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXCkuKi9cMS8nKSAyPi9kZXYvbnVsbGAKICAgICAgICAgICAgU1Q9IkdOVS88TGludXggPiR7dl9saWJjfS88JHt2X2tlcm59PiIKICAgICAgICAgICAgaWYgWyAtZiAvZXRjL2xzYi1yZWxlYXNlIF07IHRoZW4KICAgICAgICAgICAgICAgIGV2YWwgYCggLiAvZXRjL2xzYi1yZWxlYXNlCiAgICAgICAgICAgICAgICAgICAgZWNobyAiU0M9XCJMU0Ike0xTQl9WRVJTSU9OfVwiIgogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4ke0RJU1RSSUJfSUR9IiAhPSAuIC1hICIuJHtESVNUUklCX1JFTEVBU0V9IiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU1A9XCIke0RJU1RSSUJfSUR9ICR7RElTVFJJQl9SRUxFQVNFfVwiIgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICApIDI+L2Rldi9udWxsYAogICAgICAgICAgICBmaQogICAgICAgICAgICBpZiBbICIuJFNQIiA9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgZm9yIHRhZ2ZpbGUgaW4geCBcCiAgICAgICAgICAgICAgICAgICAgYGNkIC9ldGMgJiYgXAogICAgICAgICAgICAgICAgICAgIC9iaW4vbHMgKltfLV1yZWxlYXNlICpbXy1ddmVyc2lvbiAyPi9kZXYvbnVsbCB8IGVudiAtaSBzb3J0IHwgXAogICAgICAgICAgICAgICAgICAgIHNlZCAtZSAnL15yZWRoYXQtcmVsZWFzZSQvZCcgLWUgJy9ebHNiLXJlbGVhc2UkL2QnOyBcCiAgICAgICAgICAgICAgICAgICAgZWNobyByZWRoYXQtcmVsZWFzZSBsc2ItcmVsZWFzZWAKICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgWyAiLiR7dGFnZmlsZX0iID0gLnggXSAmJiBjb250aW51ZQogICAgICAgICAgICAgICAgICAgIFsgISAtZiAiL2V0Yy8ke3RhZ2ZpbGV9IiBdICYmIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgbj1gZWNobyAke3RhZ2ZpbGV9IHwgc2VkIC1lICdzL1tfLV1yZWxlYXNlJC8vJyAtZSAncy9bXy1ddmVyc2lvbiQvLydgCiAgICAgICAgICAgICAgICAgICAgdj1gKGdyZXAgVkVSU0lPTiAvZXRjLyR7dGFnZmlsZX07IGNhdCAvZXRjLyR7dGFnZmlsZX0pIHwgZ3JlcCAnWzAtOV0nIHwgc2VkIC1lICdxJyB8XAogICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eLyMvJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL14jW14wLTldKlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXC5bMC05XVswLTldKlwpLiokL1wxLycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eI1teMC05XSpcKFswLTldWzAtOV0qXC5bMC05XVswLTldKlwpLiokL1wxLycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eI1teMC05XSpcKFswLTldWzAtOV0qXCkuKiQvXDEvJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL14jLiokLy8nYAogICAgICAgICAgICAgICAgICAgIGNhc2UgImB1dGlsX2xvd2VyICR7bn1gIiBpbgogICAgICAgICAgICAgICAgICAgICAgICByZWRoYXQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLmBncmVwICdSZWQgSGF0IEVudGVycHJpc2UgTGludXgnIC9ldGMvJHt0YWdmaWxlfWAiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG49IjxSPmVkIDxIPmF0IDxFPm50ZXJwcmlzZSA8TD5pbnV4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG49IjxSPmVkIDxIPmF0IDxMPmludXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgZGViaWFuICAgICAgICAgICAgICkgbj0iRGViaWFuWyBHTlUvTGludXhdIiAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgdWJ1bnR1ICAgICAgICAgICAgICkgbj0iVWJ1bnR1WyBHTlUvTGludXhdIiAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgZmVkb3JhICAgICAgICAgICAgICkgbj0iPEZlZG9yYT4gQ29yZVsgR05VL0xpbnV4XSIgOzsKICAgICAgICAgICAgICAgICAgICAgICAgc3VzZSAgICAgICAgICAgICAgICkgbj0iU3VTRVsgTGludXhdIiAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgbWFuZHJha2UqfG1hbmRyaXZhICkgbj0iTWFuZHJpdmFbIExpbnV4XSIgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgZ2VudG9vICAgICAgICAgICAgICkgbj0iR2VudG9vWyBHTlUvTGludXhdIiAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgc2xhY2t3YXJlICAgICAgICAgICkgbj0iU2xhY2t3YXJlWyBMaW51eF0iICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgdHVyYm9saW51eCAgICAgICAgICkgbj0iVHVyYm9MaW51eCIgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pdGVkbGludXggICAgICAgICkgbj0iVW5pdGVkTGludXgiICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICkgbj0iJHtufVsgR05VL0xpbnV4XSIgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiJG4iIGluCiAgICAgICAgICAgICAgICAgICAgICAgICoiPCIqIj4iKiApIFNQPSIkbiA8JHY+IiA7OwogICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgKSBTUD0iJG4gJHYiICAgOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgZmkKICAgICAgICAgICAgWyAiLiRTUCIgPSAuIF0gJiYgU1A9IiR7U1R9IgogICAgICAgICAgICBbICIuJFNDIiA9IC4gXSAmJiBTQz0iTFNCIgogICAgICAgICAgICA7OwoKICAgICAgICAjICAgU3VuIFNvbGFyaXMKICAgICAgICAqOlN1bk9TOiogKQogICAgICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZQogICAgICAgICAgICBBVD0iJHtVTkFNRV9NQUNISU5FfSIKICAgICAgICAgICAgY2FzZSAiJHtBVH0iIGluCiAgICAgICAgICAgICAgICBpODZwYyApCiAgICAgICAgICAgICAgICAgICAgQVQ9ImlYODYiCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiYCgvYmluL2lzYWluZm8gLWspIDI+JjFgIiBpbgogICAgICAgICAgICAgICAgICAgICAgICBhbWQ2NCApIEFUPSJBTUQ2NCIgOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBBUD0iJHtBVH0iCiAgICAgICAgICAgIGNhc2UgIiR7QVB9IiBpbgogICAgICAgICAgICAgICAgc3VuNFtjZG1dICkgQVA9IlNQQVJDMzIiIDs7CiAgICAgICAgICAgICAgICBzdW40W3V2XSAgKSBBUD0iU1BBUkM2NCIgOzsKICAgICAgICAgICAgICAgIHN1bjQqICAgICApIEFQPSJTUEFSQyIgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIEFDPSIke0FQfSIKICAgICAgICAgICAgY2FzZSAiJHtBQ30iIGluCiAgICAgICAgICAgICAgICBTUEFSQyogKSBBQz0iU1BBUkMiIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KICAgICAgICAgICAgU1Q9IltTdW4gXVN1bk9TICR7VU5BTUVfUkVMRUFTRX0iCiAgICAgICAgICAgIHY9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHxcCiAgICAgICAgICAgICAgIHNlZCAtZSAnczteNFwuOzEuOycgXAogICAgICAgICAgICAgICAgICAgLWUgJ3M7XjVcLlwoWzAtNl1cKVteMC05XSokOzIuXDE7JyBcCiAgICAgICAgICAgICAgICAgICAtZSAnczteNVwuXChbMC05XVswLTldKlwpLio7XDE7J2AKICAgICAgICAgICAgU1A9IltTdW4gXVNvbGFyaXMgJHYiCiAgICAgICAgICAgIGNhc2UgIiR7VU5BTUVfUkVMRUFTRX0iIGluCiAgICAgICAgICAgICAgICA0LiogKSBTQz0iNC4zQlNEIiA7OwogICAgICAgICAgICAgICAgNS4qICkgU0M9IlNWUjQiICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICA7OwoKICAgICAgICAjICAgU0NPIFVuaXhXYXJlCiAgICAgICAgKjpVbml4V2FyZToqICkKICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKICAgICAgICAgICAgQVQ9IiR7VU5BTUVfTUFDSElORX0iCiAgICAgICAgICAgIGNhc2UgIiR7QVR9IiBpbgogICAgICAgICAgICAgICAgaVszLTZdODYgfCBpeDg2YXQgKSBBVD0iaVg4NiIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBBUD0iJHtBVH0iCiAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCiAgICAgICAgICAgIHY9YC9zYmluL3VuYW1lIC12YAogICAgICAgICAgICBTVD0iW1NDTyBdVW5peFdhcmUgJHt2fSIKICAgICAgICAgICAgU1A9IiR7U1R9IgogICAgICAgICAgICBTQz0iU1ZSJHtVTkFNRV9SRUxFQVNFfSIKICAgICAgICAgICAgOzsKCiAgICAgICAgIyAgIFFOWAogICAgICAgICo6UU5YOiogKQogICAgICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZQogICAgICAgICAgICBBVD0iJHtVTkFNRV9NQUNISU5FfSIKICAgICAgICAgICAgY2FzZSAiJHtBVH0iIGluCiAgICAgICAgICAgICAgICB4ODZwYyApIEFUPSJpWDg2IiA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIEFQPSIke0FUfSIKICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KICAgICAgICAgICAgdj0iJHtVTkFNRV9SRUxFQVNFfSIKICAgICAgICAgICAgU1Q9IlFOWFsgTmV1dHJpbm8gUlRPU10gJHt2fSIKICAgICAgICAgICAgdj1gZWNobyAiJHt2fSIgfCBzZWQgLWUgJ3M7XlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXCkuKiQ7XDE7J2AKICAgICAgICAgICAgU1A9IlFOWFsgTmV1dHJpbm8gUlRPU10gJHt2fSIKICAgICAgICAgICAgU0M9IlFOWCIKICAgICAgICAgICAgOzsKCiAgICAgICAgIyAgIFNHSSBJUklYCiAgICAgICAgKjpJUklYKjoqICkKICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKICAgICAgICAgICAgQVQ9IiR7VU5BTUVfTUFDSElORX0iCiAgICAgICAgICAgIEFQPSIke0FUfSIKICAgICAgICAgICAgY2FzZSAiJHtBUH06JHtVTkFNRV9TWVNURU19IiBpbgogICAgICAgICAgICAgICAgSVAqOklSSVg2NCApIEFQPSJNSVBTNjQiIDs7CiAgICAgICAgICAgICAgICBJUCo6KiAgICAgICkgQVA9Ik1JUFMiICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBBQz0iJHtBUH0iCiAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCiAgICAgICAgICAgIHY9YCgvYmluL3VuYW1lIC1SIHx8IC9iaW4vdW5hbWUgLXIpIDI+L2Rldi9udWxsIHwgc2VkIC1lICdzO1swLTkuXSogOzsnYAogICAgICAgICAgICBTVD0iW1NHSSBdSVJJWCAke3Z9IgogICAgICAgICAgICB2PSIke1VOQU1FX1JFTEVBU0V9IgogICAgICAgICAgICBTUD0iW1NHSSBdSVJJWCAke3Z9IgogICAgICAgICAgICBTQz0iNC4yQlNEL1NWUjMiCiAgICAgICAgICAgIDs7CgogICAgICAgICMgICBIUCBIUC1VWAogICAgICAgICo6SFAtVVg6KiApCiAgICAgICAgICAgICMgICBkZXRlcm1pbmUgYXJjaGl0ZWN0dXJlCiAgICAgICAgICAgIEFUPSIke1VOQU1FX01BQ0hJTkV9IgogICAgICAgICAgICBjYXNlICIke0FUfSIgaW4KICAgICAgICAgICAgICAgIGlhNjQgKSBBVD0iSUE2NCIgOzsKICAgICAgICAgICAgICAgIDkwMDAvWzM0XT8/ICkgQVQ9TTY4SyA7OwogICAgICAgICAgICAgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCiAgICAgICAgICAgICAgICAgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCiAgICAgICAgICAgICAgICAgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCiAgICAgICAgICAgICAgICAgICAgICAgIDUyMyApIEFUPSJIUFBBMS4wIiA7OwogICAgICAgICAgICAgICAgICAgICAgICA1MjggKSBBVD0iSFBQQTEuMSIgOzsKICAgICAgICAgICAgICAgICAgICAgICAgNTMyICkgQVQ9IkhQUEEyLjAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiApIEFUPSIke0FUfW4iIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQgKSBBVD0iJHtBVH13IiA7OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBBUD0iJHtBVH0iCiAgICAgICAgICAgIGNhc2UgIiR7QVB9IiBpbgogICAgICAgICAgICAgICAgSFBQQSogKSBBUD0iSFBQQSIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBBQz0iJHtBUH0iCiAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCiAgICAgICAgICAgIHY9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1lICdzO15bXjAtOV0qOzsnYAogICAgICAgICAgICBTVD0iW0hQIF08SFA+LTxVWCAke3Z9PiIKICAgICAgICAgICAgU1A9IiR7U1R9IgogICAgICAgICAgICBjYXNlICIke3Z9IiBpbgogICAgICAgICAgICAgICAgMTAuKiAgICkgU0M9IlNWUjQuMiIgOzsKICAgICAgICAgICAgICAgIFs3LTldKiApIFNDPSJTVlI0IiAgIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgOzsKCiAgICAgICAgIyAgIEhQIFRydTY0IChPU0YxKQogICAgICAgICo6T1NGMToqICkKICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKICAgICAgICAgICAgQVA9IiR7VU5BTUVfTUFDSElORX0iCiAgICAgICAgICAgIGNhc2UgIiR7QVB9IiBpbgogICAgICAgICAgICAgICAgYWxwaGEgKSBBUD0iQWxwaGEiIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgYWxwaGFfdHlwZT1gKC91c3Ivc2Jpbi9wc3JpbmZvIC12KSAyPi9kZXYvbnVsbCB8XAogICAgICAgICAgICAgICAgc2VkIC1uIC1lICdzL14uKlRoZSBhbHBoYSBcKFteIF1bXiBdKlwpLipwcm9jZXNzb3IuKiQvXDEvcCcgfCBzZWQgLWUgJ3EnYAogICAgICAgICAgICBBVD0iJHtBUH0ke2FscGhhX3R5cGV9IgogICAgICAgICAgICBBQz0iJHtBUH0iCiAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCiAgICAgICAgICAgIHY9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1lICdzO15bVlRYXTs7J2AKICAgICAgICAgICAgU1Q9IltIUCBdVHJ1NjQgJHt2fSIKICAgICAgICAgICAgU1A9IiR7U1R9IgogICAgICAgICAgICBTQz0iT1NGMSIKICAgICAgICAgICAgOzsKCiAgICAgICAgIyAgIElCTSBBSVgKICAgICAgICAqOkFJWDoqICkKICAgICAgICAgICAgY3B1X2FyY2g9cnM2MDAwCiAgICAgICAgICAgIGlmIFsgLXggL3Vzci9zYmluL2xzZGV2IC1hIC14IC91c3Ivc2Jpbi9sc2F0dHIgXTsgdGhlbgogICAgICAgICAgICAgICAgY3B1X2lkPWAvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSB8IHNlZCAxcSB8IGF3ayAneyBwcmludCAkMSB9J2AKICAgICAgICAgICAgICAgIGlmIFsgIi5gL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtjcHVfaWR9IHwgZ3JlcCAtaSBwb3dlcnBjYCIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgY3B1X2FyY2g9cG93ZXJwYwogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgZWxpZiBbIC1kIC9RT3BlblN5cyBdOyB0aGVuCiAgICAgICAgICAgICAgICAjICAgSUJNIGk1L09TIChha2EgT1MvNDAwKSB3aXRoIFBBU0UgKFBvcnRhYmxlIEFwcGxpY2F0aW9uIFNvbHV0aW9ucyBFbnZpcm9ubWVudCkKICAgICAgICAgICAgICAgIGNwdV9hcmNoPXBvd2VycGMKICAgICAgICAgICAgZmkKICAgICAgICAgICAgaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF07IHRoZW4KICAgICAgICAgICAgICAgIG9zX2xldmVsPWAvdXNyL2Jpbi9vc2xldmVsYAogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBvc19sZXZlbD0iYHVuYW1lIC12YC5gdW5hbWUgLXJgIgogICAgICAgICAgICBmaQogICAgICAgICAgICBvc19sZXZlbD1gZWNobyAiJHtvc19sZXZlbH0iIHxcCiAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3M7XlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXClcKFwuWzAtOV1bMC05XSpcKVwoLipcKSQ7PFwxPlwyW1wzXTsnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAnczteXChbMC05XVswLTldKlwuWzAtOV1bMC05XSpcKVwoLipcKSQ7PFwxPlwyOydgCiAgICAgICAgICAgIEFUPSIke2NwdV9hcmNofSIKICAgICAgICAgICAgQVA9IiR7QVR9IgogICAgICAgICAgICBBQz0iJHtBUH0iCiAgICAgICAgICAgIFNUPSJbSUJNIF08QUlYID4ke29zX2xldmVsfSIKICAgICAgICAgICAgU1A9IiR7U1R9IgogICAgICAgICAgICBjYXNlICIke29zX2xldmVsfSIgaW4KICAgICAgICAgICAgICAgIFsxMl0qICkgU0M9IlNWUjIiIDs7CiAgICAgICAgICAgICAgICAqICAgICApIFNDPSJTVlI0IiA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIDs7CgogICAgICAgICMgICBBcHBsZSBNYWNPUyBYIERhcndpbgogICAgICAgICo6RGFyd2luOiogKQogICAgICAgICAgICBBVD1gdW5hbWUgLXBgCiAgICAgICAgICAgIGNhc2UgIiR7QVR9IiBpbgogICAgICAgICAgICAgICAgcG93ZXJwYyApIEFUPSJQUEMiIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgQVA9IiR7QVR9IgogICAgICAgICAgICBBQz0iJHtBUH0iCiAgICAgICAgICAgIGNhc2UgIiR7QUN9IiBpbgogICAgICAgICAgICAgICAgaT84NiApIEFDPSJpWDg2IiA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIFNUPSJbQXBwbGUgXSR7VU5BTUVfU1lTVEVNfSAke1VOQU1FX1JFTEVBU0V9IgogICAgICAgICAgICBTUD0iJHtTVH0iCiAgICAgICAgICAgIFNDPSI0LjRCU0QvTWFjaDMiCiAgICAgICAgICAgIDs7CgogICAgICAgICMgICBUT0RPIC4uLkFERCBZT1VSIE5FVyBQTEFURk9STSBDSEVDSyBIRVJFLi4uIFRPRE8KICAgICAgICAjICo6WFhYOiogKQogICAgICAgICMgICAuLi4KICAgICAgICAjICAgOzsKCiAgICAgICAgIyAgIC4uLkEgU1RJTEwgVU5LTk9XTiBQTEFURk9STS4uLgogICAgICAgICogKQogICAgICAgICAgICBBVD1gZWNobyAiJHtVTkFNRV9NQUNISU5FfSIgfCBzZWQgLWUgInM7IDske29wdF9DfTtnImAKICAgICAgICAgICAgQVA9IiR7QVR9IgogICAgICAgICAgICBBQz0iJHtBUH0iCiAgICAgICAgICAgIHY9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHxcCiAgICAgICAgICAgICAgIHNlZCAtZSAncy9eLyMvJyBcCiAgICAgICAgICAgICAgICAgICAtZSAncy9eI1teMC05XSpcKFswLTldWzAtOV0qXC5bMC05XVswLTldKlwuWzAtOV1bMC05XSpcKS4qJC9cMS8nIFwKICAgICAgICAgICAgICAgICAgIC1lICdzL14jW14wLTldKlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXCkuKiQvXDEvJyBcCiAgICAgICAgICAgICAgICAgICAtZSAncy9eI1teMC05XSpcKFswLTldWzAtOV0qXCkuKiQvXDEvJyBcCiAgICAgICAgICAgICAgICAgICAtZSAncy9eIy4qJC8/LydgCiAgICAgICAgICAgIFNUPSIke1VOQU1FX1NZU1RFTX0gJHt2fSIKICAgICAgICAgICAgU1A9IiR7U1R9IgogICAgICAgICAgICBTQz0iJHtTUH0iCiAgICAgICAgICAgIDs7CgogICAgZXNhYwoKICAgICMgICBwcm92aWRlIGZhbGxiYWNrIHZhbHVlcwogICAgWyAiLiRBVCIgPSAuIF0gJiYgQVQ9IiR7QVA6LSR7QUN9fSIKICAgIFsgIi4kQVAiID0gLiBdICYmIEFQPSIke0FUOi0ke0FDfX0iCiAgICBbICIuJEFDIiA9IC4gXSAmJiBBQz0iJHtBUDotJHtBVH19IgogICAgWyAiLiRTVCIgPSAuIF0gJiYgU1Q9IiR7U1A6LSR7U0N9fSIKICAgIFsgIi4kU1AiID0gLiBdICYmIFNQPSIke1NUOi0ke1NDfX0iCiAgICBbICIuJFNDIiA9IC4gXSAmJiBTQz0iJHtTUDotJHtTVH19IgoKICAgICMgICBzdXBwb3J0IGV4cGxpY2l0IGVuZm9yY2VkIHZlcmJvc2UvY29uY2lzZSBvdXRwdXQKICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCiAgICAgICAgb3B0X0Y9YGVjaG8gIjokb3B0X0YiIHwgc2VkIC1lICdzL146Ly8nIC1lICdzLyVcKFthc11bY3B0XVwpLyVbXDFdL2cnYAogICAgZWxpZiBbICIuJG9wdF9jIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIG9wdF9GPWBlY2hvICI6JG9wdF9GIiB8IHNlZCAtZSAncy9eOi8vJyAtZSAncy8lXChbYXNdW2NwdF1cKS8lPFwxPi9nJ2AKICAgIGZpCgogICAgIyAgIHByb3ZpZGUgdmVyYm9zZSBhbmQgY29uY2lzZSB2YXJpYW50cwogICAgQUNfVj0iIjsgQUNfTj0iIjsgQUNfQz0iIgogICAgQVBfVj0iIjsgQVBfTj0iIjsgQVBfQz0iIgogICAgQVRfVj0iIjsgQVRfTj0iIjsgQVRfQz0iIgogICAgU0NfVj0iIjsgU0NfTj0iIjsgU0NfQz0iIgogICAgU1BfVj0iIjsgU1BfTj0iIjsgU1BfQz0iIgogICAgU1RfVj0iIjsgU1RfTj0iIjsgU1RfQz0iIgogICAgZm9yIHZhcl9sYyBpbiBhdCBhcCBhYyBzdCBzcCBzYzsgZG8KICAgICAgICBjYXNlICIkb3B0X0YiIGluCiAgICAgICAgICAgICoiJVske3ZhbF9sY31dIiogfCAqIiV7JHt2YWxfbGN9fSIqIHwgKiIlJHt2YWxfbGN9IiogfCAqIiU8JHt2YWxfbGN9PiIqICkKICAgICAgICAgICAgdmFyX3VjPWB1dGlsX3VwcGVyICIkdmFyX2xjImAKICAgICAgICAgICAgZXZhbCAidmFsPVwiXCQke3Zhcl91Y31cIiIKICAgICAgICAgICAgdmFsX1Y9IiI7IHZhbF9OPSIiOyB2YWxfQz0iIgogICAgICAgICAgICBjYXNlICIkb3B0X0YiIGluCiAgICAgICAgICAgICAgICAqIiVbJHt2YXJfbGN9XSIqICkKICAgICAgICAgICAgICAgICAgICB2YWxfVj1gZWNobyAiOiR2YWwiIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvXjovLycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3M7XFtcKFteXV0qXClcXTtcMTtnJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAnczs8XChbXj5dKlwpPjtcMTtnJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiczsgO6enO2ciIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOy87JSU7ZyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7p6c7JHtvcHRfU307ZyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7JSU7JHtvcHRfQ307ZyJgCiAgICAgICAgICAgICAgICAgICAgZXZhbCAiJHt2YXJfdWN9X1Y9XCJcJHt2YWxfVn1cIiIKICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIGNhc2UgIiRvcHRfRiIgaW4KICAgICAgICAgICAgICAgICoiJXske3Zhcl9sY319IiogfCAqIiUke3Zhcl9sY30iKiApCiAgICAgICAgICAgICAgICAgICAgdmFsX049YGVjaG8gIjokdmFsIiB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL146Ly8nIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzO1xbXChbXl1dKlwpXF07O2cnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzOzxcKFtePl0qXCk+O1wxO2cnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOyA7p6c7ZyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7LzslJTtnIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiczunpzske29wdF9TfTtnIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiczslJTske29wdF9DfTtnImAKICAgICAgICAgICAgICAgICAgICBldmFsICIke3Zhcl91Y31fTj1cIlwke3ZhbF9OfVwiIgogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgY2FzZSAiJG9wdF9GIiBpbgogICAgICAgICAgICAgICAgKiIlPCR7dmFyX2xjfT4iKiApCiAgICAgICAgICAgICAgICAgICAgdmFsX0M9YGVjaG8gIjokdmFsIiB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL146Ly8nIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzO1xbXChbXl1dKlwpXF07O2cnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzO1tePF0qPFwoW14+XSpcKT5bXjxdKjtcMTtnJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiczsgO6enO2ciIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOy87JSU7ZyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7p6c7JHtvcHRfU307ZyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7JSU7JHtvcHRfQ307ZyJgCiAgICAgICAgICAgICAgICAgICAgZXZhbCAiJHt2YXJfdWN9X0M9XCJcJHt2YWxfQ31cIiIKICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgZG9uZQoKICAgICMgICBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgb3V0cHV0PWBlY2hvICI6JG9wdF9GIiB8XAogICAgICAgICAgICBzZWQgLWUgInMvXjovLyIgXAogICAgICAgICAgICAgICAgLWUgInM7JVxcW2FjXFxdOyR7QUNfVn07ZyIgXAogICAgICAgICAgICAgICAgLWUgInM7JXthY307JHtBQ19OfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczslYWM7JHtBQ19OfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczslPGFjPjske0FDX0N9O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyVcXFthcFxcXTske0FQX1Z9O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyV7YXB9OyR7QVBfTn07ZyIgXAogICAgICAgICAgICAgICAgLWUgInM7JWFwOyR7QVBfTn07ZyIgXAogICAgICAgICAgICAgICAgLWUgInM7JTxhcD47JHtBUF9DfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczslXFxbYXRcXF07JHtBVF9WfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczsle2F0fTske0FUX059O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyVhdDske0FUX059O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyU8YXQ+OyR7QVRfQ307ZyIgXAogICAgICAgICAgICAgICAgLWUgInM7JVxcW3NjXFxdOyR7U0NfVn07ZyIgXAogICAgICAgICAgICAgICAgLWUgInM7JXtzY307JHtTQ19OfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczslc2M7JHtTQ19OfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczslPHNjPjske1NDX0N9O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyVcXFtzcFxcXTske1NQX1Z9O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyV7c3B9OyR7U1BfTn07ZyIgXAogICAgICAgICAgICAgICAgLWUgInM7JXNwOyR7U1BfTn07ZyIgXAogICAgICAgICAgICAgICAgLWUgInM7JTxzcD47JHtTUF9DfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczslXFxbc3RcXF07JHtTVF9WfTtnIiBcCiAgICAgICAgICAgICAgICAtZSAiczsle3N0fTske1NUX059O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyVzdDske1NUX059O2ciIFwKICAgICAgICAgICAgICAgIC1lICJzOyU8c3Q+OyR7U1RfQ307ZyIgXAogICAgICAgICAgICAgICAgLWUgJ3MvXFxcXG4vXi9nJyB8XAogICAgICAgICAgICAgdHIgJ14nICdcMDEyJ2AKCiAgICAjICAgc3VwcG9ydCBsb3dlci91cHBlci1jYXNlIG1hcHBpbmcKICAgIGlmIFsgIi4kb3B0X0wiID0gLnllcyBdOyB0aGVuCiAgICAgICAgb3V0cHV0PWB1dGlsX2xvd2VyICIkb3V0cHV0ImAKICAgIGVsaWYgWyAiLiRvcHRfVSIgPSAueWVzIF07IHRoZW4KICAgICAgICBvdXRwdXQ9YHV0aWxfdXBwZXIgIiRvdXRwdXQiYAogICAgZmkKCiAgICAjICAgZGlzcGxheSBvdXRwdXQgc3RyaW5nCiAgICBpZiBbICIuJG9wdF9uIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIGVjaG8gLiB8IGF3ayAneyBwcmludGYoIiVzIiwgb3V0cHV0KTsgfScgb3V0cHV0PSIkb3V0cHV0IgogICAgZWxzZQogICAgICAgIGVjaG8gIiRvdXRwdXQiCiAgICBmaQoKICAgIHNodG9vbF9leGl0IDAKICAgIDs7CgphcnggKQogICAgIyMKICAgICMjICBhcnggLS0gRXh0ZW5kZWQgYXJjaGl2ZSBjb21tYW5kCiAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KICAgICMjCgogICAgYXJfcHJnPSIkb3B0X0MiCiAgICBhcl9jbWQ9IiQxIjsgc2hpZnQKICAgIGFyY2hpdmU9IiQxIjsgc2hpZnQKICAgIGZpbGVzPSIkKiIKCiAgICAjICAgd2FsayB0aHJvdWdoIHRoZSBmaWxlIGxpc3QgYW5kIGV4cGFuZCBhcmNoaXZlcyBtZW1iZXJzCiAgICBhcl90bXBkaXI9YGVjaG8gJGFyY2hpdmUgfCBzZWQgLWUgJ3M7W14vXSokOy5hcng7J2AKICAgIG5maWxlcz0nJwogICAgaWYgWyAiLiRmaWxlcyIgIT0gLiBdOyB0aGVuCiAgICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwogICAgICAgICAgICBpZiBbICEgLWYgJGZpbGUgXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogaW5wdXQgZmlsZSBub3QgZm91bmQ6ICRmaWxlIiAxPiYyCiAgICAgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGNhc2UgJGZpbGUgaW4KICAgICAgICAgICAgICAgICouYSApCiAgICAgICAgICAgICAgICAgICAgaWYgWyAhIC1kICRhcl90bXBkaXIgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAibWtkaXIgJGFyX3RtcGRpciIgMT4mMgogICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICBta2RpciAkYXJfdG1wZGlyCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBjYXNlICRhcl90bXBkaXIgaW4KICAgICAgICAgICAgICAgICAgICAgICAgIC5hcnggKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb209Ii4uLyRmaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICAqICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gJGZpbGUgfCBzZWQgLWUgJ3M7W14vXSokOzsnIC1lICdzO1woLlwpLyQ7XDE7JyAtZSAnczteJDsuOydgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZT1gZWNobyAkZmlsZSB8IHNlZCAtZSAnczsuKi9cKFteL10qXCkkO1wxOydgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbT0iYGNkICRkaXI7IHB3ZGAvJGJhc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiKGNkICRhcl90bXBkaXIgJiYgJGFyX3ByZyB4ICRmcm9tKSIgMT4mMgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgKGNkICRhcl90bXBkaXIgJiYgZXZhbCAkYXJfcHJnIHggJGZyb20pCiAgICAgICAgICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IG1lbWJlciBleHRyYWN0aW9uIGZhaWxlZCBmb3IgYXJjaGl2ZTogJGZpbGUiIDE+JjIKICAgICAgICAgICAgICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiAtIGBldmFsICRhcl9wcmcgdCAkZmlsZSB8IHNlZCAtZSAnL19cLlNZTURFRi9kJ2A7IGRvCiAgICAgICAgICAgICAgICAgICAgICAgIFsgIi4kbWVtYmVyIiA9IC4tIF0gJiYgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgbmZpbGVzPSIkbmZpbGVzICRhcl90bXBkaXIvJG1lbWJlciIKICAgICAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICogKQogICAgICAgICAgICAgICAgICAgIG5maWxlcz0iJG5maWxlcyAkZmlsZSIKICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgZG9uZQogICAgZmkKCiAgICAjICAgcnVuIHRoZSBmaW5hbCBhcmNoaXZlIGNvbW1hbmQKICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgZWNobyAiJGFyX3ByZyAkYXJfY21kICRhcmNoaXZlICRuZmlsZXMiIDE+JjIKICAgIGZpCiAgICBldmFsICRhcl9wcmcgJGFyX2NtZCAkYXJjaGl2ZSAkbmZpbGVzCiAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBhcmNoaXZlIGNvbW1hbmQgZmFpbGVkIiAxPiYyCiAgICAgICAgc2h0b29sX2V4aXQgJD8KICAgIGZpCgogICAgIyAgIGNsZWFudXAgYW5kIGRpZSBncmFjZWZ1bGx5CiAgICBpZiBbIC1kICRhcl90bXBkaXIgXTsgdGhlbgogICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gInJtIC1yZiAkYXJfdG1wZGlyIiAxPiYyCiAgICAgICAgZmkKICAgICAgICBybSAtcmYgJGFyX3RtcGRpcgogICAgZmkKCiAgICBzaHRvb2xfZXhpdCAwCiAgICA7OwoKc2xvICkKICAgICMjCiAgICAjIyAgc2xvIC0tIFNlcGFyYXRlIGxpbmtlciBvcHRpb25zIGJ5IGxpYnJhcnkgY2xhc3MKICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgogICAgIyMKCiAgICBESUZTPSIkSUZTIgoKICAgICMgICBwYXJzZSBvdXQgLUwgYW5kIC1sIG9wdGlvbnMgZnJvbSBjb21tYW5kIGxpbmUKICAgIERJUlM9JycKICAgIExJQlM9JycKICAgIEFSR1Y9JycKICAgIG9wdHByZXY9JycKICAgIGZvciBvcHQKICAgIGRvCiAgICAgICAgIyAgIGNvbmNhdGVuYXRlIHdpdGggcHJldmlvdXMgb3B0aW9uIGlmIGV4aXN0cwogICAgICAgIGlmIFsgIi4kb3B0cHJldiIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgIG9wdD0iJHtvcHRwcmV2fSR7b3B0fSI7CiAgICAgICAgICAgIG9wdHByZXY9JycKICAgICAgICBmaQogICAgICAgICMgICByZW1lbWJlciBvcHRpb25zIGZvciBhcmcgaWYgdXNlZCBzdGFuZC1hbG9uZQogICAgICAgIGlmIFsgIi4kb3B0IiA9ICIuLUwiIF0gfHwgWyAiLiRvcHQiID0gIi4tbCIgXTsgdGhlbgogICAgICAgICAgICBvcHRwcmV2PSIkb3B0IgogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBmaQogICAgICAgICMgICBzcGxpdCBhcmd1bWVudCBpbnRvIG9wdGlvbiBwbHVzIG9wdGlvbiBhcmd1bWVudAogICAgICAgIGFyZz0iYGVjaG8gJG9wdCB8IGN1dCAtYzMtYCIKICAgICAgICBvcHQ9ImBlY2hvICRvcHQgfCBjdXQgLWMxLTJgIgogICAgICAgICMgICBzdG9yZSBpbnRvIGNvbnRhaW5lcnMKICAgICAgICBjYXNlICRvcHQgaW4KICAgICAgICAgICAgLUwpIERJUlM9IiRESVJTOiRhcmciIDs7CiAgICAgICAgICAgIC1sKSBMSUJTPSIkTElCUzokYXJnIiA7OwogICAgICAgICAgICAgKikgQVJHVj0iJEFSR1YgJG9wdCIgOzsKICAgICAgICBlc2FjCiAgICBkb25lCgogICAgIyAgIHNldCBsaW5rZXIgZGVmYXVsdCBkaXJlY3RvcmllcwogICAgRElSU19ERUZBVUxUPScvbGliOi91c3IvbGliJwogICAgaWYgWyAiLiRMRF9MSUJSQVJZX1BBVEgiICE9IC4gXTsgdGhlbgogICAgICAgIERJUlNfREVGQVVMVD0iJERJUlNfREVGQVVMVDokTERfTElCUkFSWV9QQVRIIgogICAgZmkKCiAgICAjICAgc29ydCBvcHRpb25zIGJ5IGNsYXNzCiAgICBESVJTX09CSj0nJwogICAgTElCU19PQko9JycKICAgIERJUlNfUElDPScnCiAgICBMSUJTX1BJQz0nJwogICAgRElSU19EU089JycKICAgIExJQlNfRFNPPScnCgogICAgIyAgICBmb3IgZWFjaCBsaWJyYXJ5Li4uCiAgICBPSUZTPSIkSUZTIjsgSUZTPSc6JwogICAgZm9yIGxpYiBpbiAkTElCUzsgZG8KICAgICAgICBbICIuJGxpYiIgPSAuIF0gJiYgY29udGludWUKCiAgICAgICAgZm91bmQ9J25vJwogICAgICAgIGZvdW5kX2luZGVmZGlyPSdubycKICAgICAgICBmb3VuZF90eXBlPScnCiAgICAgICAgZm91bmRfZGlyPScnCgogICAgICAgICMgICAgZm9yIGVhY2ggZGlyZWN0b3J5Li4uCiAgICAgICAgT0lGUzI9IiRJRlMiOyBJRlM9IjokRElGUyIKICAgICAgICBmb3IgZGlyIGluICR7RElSU30gc3dpdGNoLXRvLWRlZmRpcnMgJHtESVJTX0RFRkFVTFR9OyBkbwogICAgICAgICAgICBbICIuJGRpciIgPSAuIF0gJiYgY29udGludWUKICAgICAgICAgICAgWyAiLiRkaXIiID0gLnN3aXRjaC10by1kZWZkaXJzIF0gJiYgZm91bmRfaW5kZWZkaXI9eWVzCiAgICAgICAgICAgIFsgISAtZCAkZGlyIF0gJiYgY29udGludWUKCiAgICAgICAgICAgICMgICAgc2VhcmNoIHRoZSBmaWxlCiAgICAgICAgICAgIE9JRlMzPSIkSUZTIjsgSUZTPSIkRElGUyIKICAgICAgICAgICAgZm9yIGZpbGUgaW4gJycgYGNkICRkaXIgJiYgZW52IC1pIC9iaW4vbHMgbGliJHtsaWJ9LiogMj4vZGV2L251bGxgOyBkbwogICAgICAgICAgICAgICAgIFsgIi4kZmlsZSIgPSAuIF0gJiYgY29udGludWUKICAgICAgICAgICAgICAgICBjYXNlICRmaWxlIGluCiAgICAgICAgICAgICAgICAgICAgICouc298Ki5zby5bMC05XSp8Ki5zbHwqLnNsLlswLTldKiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9eWVzOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3R5cGU9RFNPOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgKi5sb3wqLmxhICkKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZD15ZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfdHlwZT1QSUMKICAgICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICAqLmEgKQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kZm91bmRfdHlwZSIgPSAuIF07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9eWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3R5cGU9T0JKCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgZG9uZQogICAgICAgICAgICBJRlM9IiRPSUZTMyIKICAgICAgICAgICAgaWYgWyAiLiRmb3VuZCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgICAgIElGUz0iJE9JRlMyIgoKICAgICAgICBpZiBbICIuJGZvdW5kIiA9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICBpZiBbICIuJGZvdW5kX2luZGVmZGlyIiAhPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgICAgIGV2YWwgImRpcmxpc3Q9XCJcJHtESVJTXyR7Zm91bmRfdHlwZX19OlwiIgogICAgICAgICAgICAgICAgY2FzZSAiJGRpcmxpc3QiIGluCiAgICAgICAgICAgICAgICAgICAgKjokZm91bmRfZGlyOiogKSA7OwogICAgICAgICAgICAgICAgICAgICogKSBldmFsICJESVJTXyR7Zm91bmRfdHlwZX09XCJcJERJUlNfJHtmb3VuZF90eXBlfToke2ZvdW5kX2Rpcn1cIiIgOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIGV2YWwgIkxJQlNfJHtmb3VuZF90eXBlfT1cIlwkTElCU18ke2ZvdW5kX3R5cGV9OiRsaWJcIiIKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZXZhbCAiTElCU18ke2ZvdW5kX3R5cGV9PVwiXCRMSUJTXyR7Zm91bmRfdHlwZX06JGxpYlwiIgogICAgICAgICAgICBmaQogICAgICAgIGVsc2UKICAgICAgICAgICAgTElCU19PQko9IiRMSUJTX09CSjokbGliIgogICAgICAgICAgICAjZGlybGlzdD0iYGVjaG8gJERJUlMgJERJUlNfREVGQVVMVCB8IHNlZCAtZSAncy86LyAvZydgIgogICAgICAgICAgICAjZWNobyAic2xvOldhcm5pbmc6IGxpYnJhcnkgXCIkbGliXCIgbm90IGZvdW5kIGluIGFueSBvZiB0aGUgZm9sbG93aW5nIGRpcnM6IiAyPiYxCiAgICAgICAgICAgICNlY2hvICJzbG86V2FybmluZzogJGRpcmxpc3QiIDE+JjEKICAgICAgICBmaQogICAgZG9uZQogICAgSUZTPSIkT0lGUyIKCiAgICAjICAgYWxzbyBwYXNzLXRocm91Z2ggdW51c2VkIGRpcnMgZXZlbiBpZiBpdCdzIHVzZWxlc3MKICAgIE9JRlM9IiRJRlMiOyBJRlM9JzonCiAgICBmb3IgZGlyIGluICRESVJTOyBkbwogICAgICAgIGRpcmxpc3Q9IiR7RElSU19PQkp9OiR7RElSU19QSUN9OiR7RElSU19EU099OiIKICAgICAgICBjYXNlICIkZGlybGlzdCIgaW4KICAgICAgICAgICAgKjokZGlyOiogKSA7OwogICAgICAgICAgICAqICkgRElSU19PQko9IiRESVJTX09CSjokZGlyIiA7OwogICAgICAgIGVzYWMKICAgIGRvbmUKICAgIElGUz0iJE9JRlMiCgogICAgIyAgIHJlYXNzZW1ibGUgdGhlIG9wdGlvbnMgYnV0IHNlcGFyYXRlZCBieSB0eXBlCiAgICBmb3IgdHlwZSBpbiBPQkogUElDIERTTzsgZG8KICAgICAgICBPSUZTPSIkSUZTIjsgSUZTPSc6JwogICAgICAgIGV2YWwgImxpYnM9XCJcJExJQlNfJHt0eXBlfVwiIgogICAgICAgIG9wdHM9JycKICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbwogICAgICAgICAgICBbICIuJGxpYiIgPSAuIF0gJiYgY29udGludWUKICAgICAgICAgICAgb3B0cz0iJG9wdHMgLWwkbGliIgogICAgICAgIGRvbmUKICAgICAgICBldmFsICJMSUJTXyR7dHlwZX09XCIkb3B0c1wiIgoKICAgICAgICBldmFsICJkaXJzPVwiXCRESVJTXyR7dHlwZX1cIiIKICAgICAgICBvcHRzPScnCiAgICAgICAgZm9yIGRpciBpbiAkZGlyczsgZG8KICAgICAgICAgICAgWyAiLiRkaXIiID0gLiBdICYmIGNvbnRpbnVlCiAgICAgICAgICAgIG9wdHM9IiRvcHRzIC1MJGRpciIKICAgICAgICBkb25lCiAgICAgICAgZXZhbCAiRElSU18ke3R5cGV9PVwiJG9wdHNcIiIKICAgICAgICBJRlM9IiRPSUZTIgogICAgZG9uZQoKICAgICMgICBnaXZlIGJhY2sgcmVzdWx0cwogICAgZm9yIHZhciBpbiBBUkdWIERJUlNfT0JKIExJQlNfT0JKIERJUlNfUElDIExJQlNfUElDIERJUlNfRFNPIExJQlNfRFNPOyBkbwogICAgICAgIGV2YWwgInZhbD1cIlwkJHt2YXJ9XCIiCiAgICAgICAgdmFsPSJgZWNobyAkdmFsIHwgc2VkIC1lICdzL14gKi8vJ2AiCiAgICAgICAgZWNobyAiJHtvcHRfcH0ke3Zhcn09XCIke3ZhbH1cIiIKICAgIGRvbmUKCiAgICBzaHRvb2xfZXhpdCAwCiAgICA7OwoKc2NwcCApCiAgICAjIwogICAgIyMgIHNjcHAgLS0gU2hhcmluZyBDIFByZS1Qcm9jZXNzb3IKICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgogICAgIyMKCiAgICBzcmNzPSIkKiIKICAgIG91dHB1dD0iJHtvcHRfb30ubiIKCiAgICAjICAgZmluZCBhIHJlYXNvbmFibGUgQXdrCiAgICBhd2s9JycKICAgIHBhdGhzPWBlY2hvICRQQVRIIHxcCiAgICAgICAgICAgc2VkIC1lICdzJS8qOiU6JWcnIC1lICdzJS8kJSUnIFwKICAgICAgICAgICAgICAgLWUgJ3MvXjovLjovJyAtZSAncy86Oi86LjovZycgLWUgJ3MvOiQvOi4vJyBcCiAgICAgICAgICAgICAgIC1lICdzLzovIC9nJ2AKICAgIGZvciBuYW1lIGluIGdhd2sgbmF3ayBhd2s7IGRvCiAgICAgICAgZm9yIHBhdGggaW4gJHBhdGhzOyBkbwogICAgICAgICAgICBpZiBbIC1yICIkcGF0aC8kbmFtZSIgXTsgdGhlbgogICAgICAgICAgICAgICAgYXdrPSIkcGF0aC8kbmFtZSIKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgICAgIGlmIFsgIi4kYXdrIiAhPSAuIF07IHRoZW4KICAgICAgICAgICAgYnJlYWsKICAgICAgICBmaQogICAgZG9uZQogICAgaWYgWyAiLiRhd2siID0gLiBdOyB0aGVuCiAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogY2Fubm90IGZpbmQgYSByZWFzb25hYmxlIEF3ayIgMT4mMgogICAgICAgIHNodG9vbF9leGl0IDEKICAgIGZpCgogICAgIyAgIHBhcnNlIHNvdXJjZSBmaWxlKHMpCiAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgogICAgICAgIGVjaG8gIlBhcnNpbmc6IiB8ICRhd2sgJ3sgcHJpbnRmKCIlcyIsICQwKTsgfScgMT4mMgogICAgZmkKICAgIGZvciBzcmMgaW4gJHNyY3M7IGRvCiAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgZWNobyAkc3JjIHwgJGF3ayAneyBwcmludGYoIiAlcyIsICQwKTsgfScgMT4mMgogICAgICAgIGZpCiAgICAgICAgaWYgWyAiLiRvcHRfZiIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgIGlucHV0Y21kPSJzZWQiCiAgICAgICAgICAgIE9JRlM9IiRJRlMiOyBJRlM9IiRBU0NfTkwiOyBzZXQgLS0gJG9wdF9mOyBJRlM9IiRPSUZTIgogICAgICAgICAgICBmb3IgZQogICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgaW5wdXRjbWQ9IiRpbnB1dGNtZCAtZSAnJGUnIgogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIGlucHV0Y21kPSIkaW5wdXRjbWQgJyRzcmMnIgogICAgICAgIGVsc2UKICAgICAgICAgICAgaW5wdXRjbWQ9ImNhdCAnJHNyYyciCiAgICAgICAgZmkKICAgICAgICBldmFsICRpbnB1dGNtZCB8XAogICAgICAgICRhd2sgJwogICAgICAgICAgIEJFR0lOIHsKICAgICAgICAgICAgICAgbG4gICAgPSAwOwogICAgICAgICAgICAgICBmbG4gICA9IDA7CiAgICAgICAgICAgICAgIGxldmVsID0gMDsKICAgICAgICAgICAgICAgbW9kZSAgPSAiIjsKICAgICAgICAgICAgICAgc3RvcmUgPSAiIjsKICAgICAgICAgICB9CiAgICAgICAgICAgewogICAgICAgICAgICAgICBsbisrOwogICAgICAgICAgIH0KICAgICAgICAgICAvXiNpZi4qLyB7CiAgICAgICAgICAgICAgIGxldmVsKys7CiAgICAgICAgICAgfQogICAgICAgICAgIC9eI2lmIFthLXpBLVpfXVthLXpBLVowLTlfXSogKiQvIHsKICAgICAgICAgICAgICAgaWYgKCQyID09IGRlZmluZSkgewogICAgICAgICAgICAgICAgICAgbW9kZSA9ICJEIjsKICAgICAgICAgICAgICAgICAgIHByaW50ZigiRDojbGluZSAlZCBcIiVzXCJcbiIsIGxuLCBzcmMpOwogICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICAvXiNlbmRpZi4qLyB7CiAgICAgICAgICAgICAgIGxldmVsLS07CiAgICAgICAgICAgICAgIGlmIChtb2RlID09ICJEIiAmJiBsZXZlbCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICBtb2RlID0gIiI7CiAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIC9eW2EtekEtWl9dW2EtekEtWjAtOV9dLio7LiovIHsKICAgICAgICAgICAgICAgaWYgKCQxID09IGNsYXNzKSB7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIlY6I2xpbmUgJWQgXCIlc1wiXG4iLCBsbiwgc3JjKTsKICAgICAgICAgICAgICAgICAgIHByaW50ZigiVjolc1xuIiwgJDApOwogICAgICAgICAgICAgICAgICAgcHJpbnRmKCJKOiVzXG4iLCAkMCk7CiAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIC9eW2EtekEtWl9dW2EtekEtWjAtOV9dLio9LiovIHsKICAgICAgICAgICAgICAgaWYgKCQxID09IGNsYXNzKSB7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIlY6I2xpbmUgJWQgXCIlc1wiXG4iLCBsbiwgc3JjKTsKICAgICAgICAgICAgICAgICAgIHByaW50ZigiVjolc1xuIiwgJDApOwogICAgICAgICAgICAgICAgICAgcHJpbnRmKCJKOiVzXG4iLCAkMCk7CiAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKi8gewogICAgICAgICAgICAgICBpZiAoJDEgPT0gY2xhc3MpIHsKICAgICAgICAgICAgICAgICAgIGZsbiA9IGxuOwogICAgICAgICAgICAgICAgICAgc3RvcmUgPSAkMDsKICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiRiI7CiAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIC9eXHsgKiQvIHsKICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gIkYiKSB7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIkY6I2xpbmUgJWQgXCIlc1wiXG4iLCBmbG4sIHNyYyk7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIkY6JXM7XG4iLCBzdG9yZSk7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIkk6JXM7XG4iLCBzdG9yZSk7CiAgICAgICAgICAgICAgICAgICBzdG9yZSA9ICIiOwogICAgICAgICAgICAgICAgICAgbW9kZSA9ICIiOwogICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChtb2RlID09ICJEIikKICAgICAgICAgICAgICAgICAgIHByaW50ZigiRDolc1xuIiwgJDApOwogICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09ICJGIikKICAgICAgICAgICAgICAgICAgIHN0b3JlID0gc3RvcmUgIiAiICQwOwogICAgICAgICAgIH0KICAgICAgICAnICJzcmM9JHNyYyIgImRlZmluZT0kb3B0X0QiICJjbGFzcz0kb3B0X0MiID4+JHRtcGZpbGUKICAgIGRvbmUKICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCiAgICAgICAgZWNobyAiIiAxPiYyCiAgICBmaQoKICAgICMgICBzdGFydCBnZW5lcmF0aW5nIG91dHB1dCBoZWFkZXIKICAgIGVjaG8gIi8qICRvcHRfbyAtLSBhdXRvZ2VuZXJhdGVkIGZyb20gJG9wdF90LCBETyBOT1QgRURJVCEgKi8iID4kb3V0cHV0CiAgICBlY2hvICIjbGluZSAxIFwiJG9wdF90XCIiID4+JG91dHB1dAogICAgc2VkIDwkb3B0X3QgLWUgIjEsL14ke29wdF9NfSAqXCQvcCIgLWUgJ2QnIHxcCiAgICBzZWQgLWUgIi9eJHtvcHRfTX0gKlwkL2QiID4+JG91dHB1dAoKICAgICMgICBtZXJnZSBpbiB0aGUgZGVmaW5lIGJsb2NrcwogICAgZ3JlcCAnXkQ6JyAkdG1wZmlsZSB8IHNlZCAtZSAncy9eRDovLycgPj4kb3V0cHV0CgogICAgIyAgIGdlbmVyYXRlIHN0YW5kYXJkIHByb2xvZwogICAgZWNobyAiI2xpbmUgMSBcIl9PTl9USEVfRkxZX1wiIiA+PiRvdXRwdXQKICAgIGVjaG8gIiIgPj4kb3V0cHV0CiAgICBlY2hvICIvKiBtYWtlIHN1cmUgdGhlIHNjcHAgc291cmNlIGV4dGVuc2lvbnMgYXJlIHNraXBwZWQgKi8iID4+JG91dHB1dAogICAgZWNobyAiI2RlZmluZSAkb3B0X0QgMCIgPj4kb3V0cHV0CiAgICBlY2hvICIjZGVmaW5lICRvcHRfQyAvKiovIiA+PiRvdXRwdXQKCiAgICAjICAgZ2VuZXJhdGUgbmFtZXNwYWNlIGhpZGluZyBmb3IgdmFyaWFibGVzCiAgICBlY2hvICIiID4+JG91dHB1dAogICAgZWNobyAiLyogbW92ZSBpbnRlcm4gdmFyaWFibGVzIHRvIGhpZGRlbiBuYW1lc3BhY2UgKi8iID4+JG91dHB1dAogICAgZ3JlcCAnXko6JyAkdG1wZmlsZSB8IHNlZCA+PiRvdXRwdXQgXAogICAgICAgIC1lICdzL15KOi8vJyBcCiAgICAgICAgLWUgJ3MvICAqLyAvZycgXAogICAgICAgIC1lICdzL15bXj07XSpbICpdXChbYS16QS1aMC05X10qXClcW1xdOy4qJC8jZGVmaW5lIFwxIF9fXDEvJyBcCiAgICAgICAgLWUgJ3MvXltePTtdKlsgKl1cKFthLXpBLVowLTlfXSpcKVxbXF0gPS4qJC8jZGVmaW5lIFwxIF9fXDEvJyBcCiAgICAgICAgLWUgJ3MvXltePTtdKlsgKl1cKFthLXpBLVowLTlfXSpcKTsuKiQvI2RlZmluZSBcMSBfX1wxLycgXAogICAgICAgIC1lICdzL15bXj07XSpbICpdXChbYS16QS1aMC05X10qXCkgPS4qJC8jZGVmaW5lIFwxIF9fXDEvJwoKICAgICMgICBnZW5lcmF0ZSBuYW1lc3BhY2UgaGlkaW5nIGZvciBmdW5jdGlvbnMKICAgIGVjaG8gIiIgPj4kb3V0cHV0CiAgICBlY2hvICIvKiBtb3ZlIGludGVybiBmdW5jdGlvbnMgdG8gaGlkZGVuIG5hbWVzcGFjZSAqLyIgPj4kb3V0cHV0CiAgICBncmVwICdeSTonICR0bXBmaWxlIHwgc2VkID4+JG91dHB1dCBcCiAgICAgICAgLWUgJ3MvXkk6Ly8nIFwKICAgICAgICAtZSAncy9cKFsgKF1cKSAqL1wxL2cnIFwKICAgICAgICAtZSAncy8gKlwoWyksXVwpL1wxL2cnIFwKICAgICAgICAtZSAncy9eW14oXSpbICpdXChbYS16QS1aMC05X10qXCkoLiokLyNkZWZpbmUgXDEgX19cMS8nCgogICAgIyAgIGdlbmVyYXRlIHByb3RvdHlwZXMgZm9yIHZhcmlhYmxlcwogICAgZWNobyAiIiA+PiRvdXRwdXQKICAgIGVjaG8gIi8qIHByb3RvdHlwZXMgZm9yIGludGVybiB2YXJpYWJsZXMgKi8iID4+JG91dHB1dAogICAgZ3JlcCAnXlY6JyAkdG1wZmlsZSB8IHNlZCA+PiRvdXRwdXQgXAogICAgICAgIC1lICdzL15WOi8vJyBcCiAgICAgICAgLWUgJ3MvICAqLyAvZycgXAogICAgICAgIC1lICdzL15cKFtePTtdKlsgKl1bYS16QS1aMC05X10qXFtcXVwpOy4qJC9cMTsvJyBcCiAgICAgICAgLWUgJ3MvXlwoW149O10qWyAqXVthLXpBLVowLTlfXSpcW1xdXCkgPS4qJC9cMTsvJyBcCiAgICAgICAgLWUgJ3MvXlwoW149O10qWyAqXVthLXpBLVowLTlfXSpcKTsuKiQvXDE7LycgXAogICAgICAgIC1lICdzL15cKFtePTtdKlsgKl1bYS16QS1aMC05X10qXCkgPS4qJC9cMTsvJyBcCiAgICAgICAgLWUgJ3MvIDsvOy9nJyBcCiAgICAgICAgLWUgInMvXiRvcHRfQyAvZXh0ZXJuIC8iCgogICAgIyAgIGdlbmVyYXRlIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucwogICAgZWNobyAiIiA+PiRvdXRwdXQKICAgIGVjaG8gIi8qIHByb3RvdHlwZXMgZm9yIGludGVybiBmdW5jdGlvbnMgKi8iID4+JG91dHB1dAogICAgZ3JlcCAnXkY6JyAkdG1wZmlsZSB8IHNlZCA+PiRvdXRwdXQgXAogICAgICAgIC1lICdzL15GOi8vJyBcCiAgICAgICAgLWUgJ3MvXChbIChdXCkgKi9cMS9nJyBcCiAgICAgICAgLWUgJ3MvICpcKFspLF1cKS9cMS9nJyBcCiAgICAgICAgLWUgJ3MvXChbKiBdXClbYS16QS1aMC05X10qLC9cMSwvZycgXAogICAgICAgIC1lICdzL1woWyogXVwpW2EtekEtWjAtOV9dKik7L1wxKTsvZycgXAogICAgICAgIC1lICdzLyhcKlthLXpBLVowLTlfXSopKC8oKikoL2cnIFwKICAgICAgICAtZSAncy9cKFsgKF1cKSAqL1wxL2cnIFwKICAgICAgICAtZSAncy8gKlwoWyksXVwpL1wxL2cnIFwKICAgICAgICAtZSAicy9eJG9wdF9DIC9leHRlcm4gLyIKCiAgICAjICAgZmluaXNoIGdlbmVyYXRpbmcgb3V0cHV0IGhlYWRlcgogICAgbj1gKGVjaG8gJyc7IHNlZCA8JG9wdF90IC1lICIxLC9eJHtvcHRfTX0gKlwkL3AiIC1lICdkJykgfFwKICAgICAgIHdjIC1sIHwgc2VkIC1lICdzO14gKlwoWzAtOV0qXCkgKiQ7XDE7J2AKICAgIGVjaG8gIiNsaW5lICRuIFwiJG9wdF90XCIiID4+JG91dHB1dAogICAgc2VkIDwkb3B0X3QgLWUgIi9eJHtvcHRfTX0gKlwkLyxcJHAiIC1lICdkJyB8XAogICAgc2VkIC1lICIvXiR7b3B0X019ICpcJC9kIiA+PiRvdXRwdXQKCiAgICAjICAgY3JlYXRlIGZpbmFsIG91dHB1dCBmaWxlCiAgICBpZiBbIC1mICRvcHRfbyBdOyB0aGVuCiAgICAgICAgaWYgWyAiLiRvcHRfcCIgPSAueWVzIF07IHRoZW4KICAgICAgICAgICAgZ3JlcCAtdiAnXiNsaW5lJyAkb3B0X28gID4kdG1wZmlsZS5vCiAgICAgICAgICAgIGdyZXAgLXYgJ14jbGluZScgJG91dHB1dCA+JHRtcGZpbGUubgogICAgICAgICAgICBvdXRfb2xkPSIkdG1wZmlsZS5vIgogICAgICAgICAgICBvdXRfbmV3PSIkdG1wZmlsZS5uIgogICAgICAgIGVsc2UKICAgICAgICAgICAgb3V0X29sZD0iJG9wdF9vIgogICAgICAgICAgICBvdXRfbmV3PSIkb3V0cHV0IgogICAgICAgIGZpCiAgICAgICAgaWYgY21wIC1zICRvdXRfb2xkICRvdXRfbmV3OyB0aGVuCiAgICAgICAgICAgIDoKICAgICAgICBlbHNlCiAgICAgICAgICAgIGNwICRvdXRwdXQgJG9wdF9vCiAgICAgICAgZmkKICAgIGVsc2UKICAgICAgICBjcCAkb3V0cHV0ICRvcHRfbwogICAgZmkKICAgIHJtIC1mICRvdXRwdXQKICAgIHJtIC1mICR0bXBmaWxlICR0bXBmaWxlLiogPi9kZXYvbnVsbCAyPiYxCgogICAgc2h0b29sX2V4aXQgMAogICAgOzsKCnZlcnNpb24gKQogICAgIyMKICAgICMjICB2ZXJzaW9uIC0tIE1haW50YWluIGEgdmVyc2lvbiBpbmZvcm1hdGlvbiBmaWxlCiAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk0LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KICAgICMjCgogICAgZmlsZT0iJDEiCgogICAgIyAgIGRldGVybWluZSBwcmVmaXggYW5kIG5hbWUKICAgIG5hbWU9IiRvcHRfbiIKICAgIHByZWZpeD0iJG9wdF9wIgoKICAgICMgICBkZXRlcm1pbmUgY3VycmVudCB2ZXJzaW9uCiAgICB0cmlwbGU9IiRvcHRfcyIKICAgIGlmIFsgIi4kdHJpcGxlIiAhPSAuIF07IHRoZW4KICAgICAgICAjICAgdXNlIGdpdmVuIHRyaXBsZQogICAgICAgIGlmIFsgIi5gZWNobyAkdHJpcGxlIHwgZ3JlcCAnWzAtOV0qLlswLTldKltzYWJwLl1bMC05XSonYCIgPSAuIF07IHRoZW4KICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24gXGAtcyc6IFxgJG9wdF9zJyIgMT4mMgogICAgICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICAgICAgZmkKICAgICAgICBldmFsIGBlY2hvICR0cmlwbGUgfFwKICAgICAgICAgICAgICBzZWQgLWUgJ3MlXChbMC05XSpcKVwuXChbMC05XSpcKVwoW3NhYnAuXVwpXChbMC05XSpcKS4qJVwKICAgICAgICAgICAgICB2ZXI9IlwxIjtyZXY9IlwyIjt0eXA9IlwzIjtsZXY9Ilw0IiUnYAogICAgICAgIHRpbT1jYWxjCiAgICBlbGlmIFsgLXIgJGZpbGUgXTsgdGhlbgogICAgICAgICMgICBkZXRlcm1pbmUgdHJpcGxlIGZyb20gZ2l2ZW4gZmlsZQogICAgICAgIGV2YWwgYGdyZXAgJ1ZlcnNpb24gWzAtOV0qLlswLTldKltzYWJwLl1bMC05XSogKFswLTldKi1bYS16QS1aXSotWzAtOV0qKScgJGZpbGUgfFwKICAgICAgICAgICAgICBzZWQgLWUgJ3MlLipWZXJzaW9uIFwoWzAtOV0qXClcLlwoWzAtOV0qXClcKFtzYWJwLl1cKVwoWzAtOV0qXCkgKFwoWzAtOV0qLVthLXpBLVpdKi1bMC05XSpcKSkuKiVcCiAgICAgICAgICAgICAgdmVyPSJcMSI7cmV2PSJcMiI7dHlwPSJcMyI7bGV2PSJcNCI7dGltPSJcNSIlJyAtZSAncSdgCiAgICBlbHNlCiAgICAgICAgIyAgIGludGlhbGlzZSB0byBmaXJzdCB2ZXJzaW9uCiAgICAgICAgdmVyPTAKICAgICAgICByZXY9MQogICAgICAgIHR5cD0uCiAgICAgICAgbGV2PTAKICAgICAgICB0aW09Y2FsYwogICAgZmkKCiAgICAjICAgZGV0ZXJtaW5lIG5ldyB2ZXJzaW9uIGluIGJhdGNoCiAgICBpZiBbICIuJG9wdF9pIiAhPSAuIF07IHRoZW4KICAgICAgICBjYXNlICRvcHRfaSBpbgogICAgICAgICAgICB2ICkgdmVyPWBleHByICR2ZXIgKyAxYAogICAgICAgICAgICAgICAgcmV2PTAKICAgICAgICAgICAgICAgIGxldj0wCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICByICkgcmV2PWBleHByICRyZXYgKyAxYAogICAgICAgICAgICAgICAgbGV2PTAKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGwgKSBsZXY9YGV4cHIgJGxldiArIDFgCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAqICkgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24gXGAtaSc6IFxgJG9wdF9pJyIgMT4mMgogICAgICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICAgICAgdGltPWNhbGMKICAgIGZpCgogICAgIyAgIGRldGVybWluZSBuZXcgdmVyc2lvbiBpbnRlcmFjdGl2ZWx5CiAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIGVjaG8gIm9sZCB2ZXJzaW9uOiAke3Zlcn0uJHtyZXZ9JHt0eXB9JHtsZXZ9IgogICAgICAgIHdoaWxlIFsgMSBdOyBkbwogICAgICAgICAgICBlY2hvIGR1bW15IHwgYXdrICd7IHByaW50ZigibmV3IHZlcnNpb246ICIpOyB9JwogICAgICAgICAgICByZWFkIHRyaXBsZQogICAgICAgICAgICBjYXNlICR0cmlwbGUgaW4KICAgICAgICAgICAgICAgIFswLTldKi5bMC05XSpbc2FicC5dWzAtOV0qICkKICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgKiApIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgdmVyc2lvbiBzdHJpbmcgZW50ZXJlZDogXGAkdHJpcGxlJyIgMT4mMgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBicmVhawogICAgICAgIGRvbmUKICAgICAgICBldmFsIGBlY2hvICR0cmlwbGUgfFwKICAgICAgICAgICAgICBzZWQgLWUgJ3MlXlwoWzAtOV0qXClcLlwoWzAtOV0qXClcKFtzYWJwLl1cKVwoWzAtOV0qXCkkJVwKICAgICAgICAgICAgICB2ZXI9IlwxIjtyZXY9IlwyIjt0eXA9IlwzIjtsZXY9Ilw0IiUnYAogICAgICAgIHRpbT1jYWxjCiAgICBmaQoKICAgICMgICBkZXRlcm1pbmUgaGV4YWRlY2ltYWwgYW5kIGxpYnRvb2wgdmFsdWUgb2YgdmVyc2lvbgogICAgY2FzZSAkdHlwIGluCiAgICAgICAgYSAgICAgKSB0eXBudW09MDsgIGxldm51bT0kbGV2IDs7CiAgICAgICAgYiAgICAgKSB0eXBudW09MTsgIGxldm51bT0kbGV2IDs7CiAgICAgICAgcCB8IC4gKSB0eXBudW09MjsgIGxldm51bT0kbGV2IDs7CiAgICAgICAgcyAgICAgKSB0eXBudW09MTU7IGxldm51bT0yNTUgIDs7ICMgc25hcHNob3RzIGFyZSBzcGVjaWFsCiAgICBlc2FjCiAgICBoZXg9YGVjaG8gIiR2ZXI6JHJldjokdHlwbnVtOiRsZXZudW0iIHxcCiAgICAgICAgIGF3ayAtRjogJ3sgcHJpbnRmKCIweCV4JTAyeCUxeCUwMngiLCAkMSwgJDIsICQzLCAkNCk7IH0nIHxcCiAgICAgICAgIHRyICdhYmNkZWYnICdBQkNERUYnYAogICAgbHR2PWBlY2hvICIkdmVyOiRyZXY6JHR5cG51bTokbGV2bnVtIiB8XAogICAgICAgICBhd2sgLUY6ICd7IHByaW50ZigiJWQ6JWQiLCAkMSoxMCArICQyLCAkMyoxMCArICQ0KTsgfSdgCgogICAgIyAgIGRldGVybWluZSBkYXRlCiAgICBpZiBbICIuJHRpbSIgPSAuY2FsYyBdOyB0aGVuCiAgICAgICAgZGF5PWBkYXRlICcrJWQnYAogICAgICAgIG1vbnRoPWBkYXRlICcrJW0nYAogICAgICAgIHllYXI9YGRhdGUgJyslWScgMj4vZGV2L251bGxgCiAgICAgICAgaWYgWyAiLiR0aW1lX3llYXIiID0gLiBdOyB0aGVuCiAgICAgICAgICAgIHllYXI9YGRhdGUgJysleSdgCiAgICAgICAgICAgIGNhc2UgJHllYXIgaW4KICAgICAgICAgICAgICAgIFs1LTldWzAtOV0pIHllYXI9IjE5JHllYXIiIDs7CiAgICAgICAgICAgICAgICBbMC00XVswLTldKSB5ZWFyPSIyMCR5ZWFyIiA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgZmkKICAgICAgICBjYXNlICRtb250aCBpbgogICAgICAgICAgICAxfDAxKSBtb250aD0nSmFuJyA7OwogICAgICAgICAgICAyfDAyKSBtb250aD0nRmViJyA7OwogICAgICAgICAgICAzfDAzKSBtb250aD0nTWFyJyA7OwogICAgICAgICAgICA0fDA0KSBtb250aD0nQXByJyA7OwogICAgICAgICAgICA1fDA1KSBtb250aD0nTWF5JyA7OwogICAgICAgICAgICA2fDA2KSBtb250aD0nSnVuJyA7OwogICAgICAgICAgICA3fDA3KSBtb250aD0nSnVsJyA7OwogICAgICAgICAgICA4fDA4KSBtb250aD0nQXVnJyA7OwogICAgICAgICAgICA5fDA5KSBtb250aD0nU2VwJyA7OwogICAgICAgICAgICAgIDEwKSBtb250aD0nT2N0JyA7OwogICAgICAgICAgICAgIDExKSBtb250aD0nTm92JyA7OwogICAgICAgICAgICAgIDEyKSBtb250aD0nRGVjJyA7OwogICAgICAgIGVzYWMKICAgICAgICB0aW09IiR7ZGF5fS0ke21vbnRofS0ke3llYXJ9IgogICAgZmkKCiAgICAjICAgcGVyZm9ybSByZXN1bHQgYWN0aW9ucwogICAgbW9kZT1zaG93CiAgICBpZiBbICIuJG9wdF9pIiAhPSAuIF07IHRoZW4KICAgICAgICBtb2RlPWVkaXQKICAgIGVsaWYgWyAiLiRvcHRfZSIgPSAueWVzIF07IHRoZW4KICAgICAgICBtb2RlPWVkaXQKICAgIGVsaWYgWyAiLiRvcHRfcyIgIT0gLiBdOyB0aGVuCiAgICAgICAgbW9kZT1lZGl0CiAgICBmaQogICAgaWYgWyAiLiRtb2RlIiA9IC5zaG93IF07IHRoZW4KICAgICAgICAjICAganVzdCBkaXNwbGF5IHRoZSBjdXJyZW50IHZlcnNpb24KICAgICAgICBjYXNlICRvcHRfZCBpbgogICAgICAgICAgICBzaG9ydCApCiAgICAgICAgICAgICAgICBlY2hvICIke3Zlcn0uJHtyZXZ9JHt0eXB9JHtsZXZ9IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgbG9uZyApCiAgICAgICAgICAgICAgICBlY2hvICIke3Zlcn0uJHtyZXZ9JHt0eXB9JHtsZXZ9ICgkdGltKSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGxpYnRvb2wgKQogICAgICAgICAgICAgICAgZWNobyAiJHtsdHZ9IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgaGV4ICkKICAgICAgICAgICAgICAgIGVjaG8gIiR7aGV4fSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICogKSBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50IHRvIG9wdGlvbiBcYC1kJzogXGAkb3B0X2QnIiAxPiYyCiAgICAgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICAgICAgICAgICAgICA7OwogICAgICAgIGVzYWMKICAgIGVsc2UKICAgICAgICAjICAgdXBkYXRlIHRoZSB2ZXJzaW9uIGZpbGUKCiAgICAgICAgIyAgIHByZS1nZW5lcmF0ZSB2YXJpb3VzIHN0cmluZ3MKICAgICAgICB0cmlwbGU9IiR7dmVyfS4ke3Jldn0ke3R5cH0ke2xldn0iCiAgICAgICAgdkhleD0iJGhleCIKICAgICAgICB2U2hvcnQ9IiR7dHJpcGxlfSIKICAgICAgICB2TG9uZz0iJHt0cmlwbGV9ICgke3RpbX0pIgogICAgICAgIHZUZVg9IlRoaXMgaXMgJHtuYW1lfSwgVmVyc2lvbiAke3RyaXBsZX0gKCR7dGltfSkiCiAgICAgICAgdkdOVT0iJHtuYW1lfSAke3RyaXBsZX0gKCR7dGltfSkiCiAgICAgICAgdldlYj0iJHtuYW1lfS8ke3RyaXBsZX0iCiAgICAgICAgdlNDQ1M9IkAoIykke25hbWV9ICR7dHJpcGxlfSAoJHt0aW19KSIKICAgICAgICB2UkNTPSJcJElkOiAke25hbWV9ICR7dHJpcGxlfSAoJHt0aW19KSBcJCIKCiAgICAgICAgIyAgIGRldGVybWluZSBzdHJpbmcgb3V0IG9mIGZpbGVuYW1lCiAgICAgICAgIyAgIChkbyBOT1QgdHJ5IHRvIG9wdGltaXplIHRoaXMgaW4gYW55IHdheSBiZWNhdXNlIG9mIHBvcnRhYmlsaXR5KQogICAgICAgIGZpbGVzdHI9YHV0aWxfdXBwZXIgIiRmaWxlIiB8IHRyICcuLyUrJyAnX19fXycgfCBzZWQgLWUgJ3MvLS9fL2cnYAoKICAgICAgICAjICAgZ2VuZXJhdGUgdXBwZXJjYXNlIHByZWZpeAogICAgICAgIHByZWZpeHVwcGVyPWB1dGlsX3VwcGVyICIkcHJlZml4ImAKCiAgICAgICAgIyAgIGNyZWF0ZSB0aGUgdmVyc2lvbiBmaWxlIGFjY29yZGluZyB0aGUgdGhlIHNlbGVjdGVkIGxhbmd1YWdlCiAgICAgICAgZWNobyAibmV3IHZlcnNpb246ICR7dkxvbmd9IgoKICAgICAgICBjcCAvZGV2L251bGwgJGZpbGUKICAgICAgICBjYXNlICRvcHRfbCBpbgogICAgICAgICAgICB0eHQgKQogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgJHtmaWxlfSAtLSBWZXJzaW9uIEluZm9ybWF0aW9uIGZvciAke25hbWV9IChzeW50YXg6IFRleHQpIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgIFthdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgbWFpbnRhaW5lZCBieSBHTlUgc2h0b29sXSIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICR2VGVYIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBjICkKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiLyoiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIioqICAke2ZpbGV9IC0tIFZlcnNpb24gSW5mb3JtYXRpb24gZm9yICR7bmFtZX0gKHN5bnRheDogQy9DKyspIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIqKiAgW2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IEdOVSBzaHRvb2xdIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIqLyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjaWZkZWYgXyR7ZmlsZXN0cn1fQVNfSEVBREVSXyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjaWZuZGVmIF8ke2ZpbGVzdHJ9XyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2RlZmluZSBfJHtmaWxlc3RyfV8iCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2RlZmluZSAke3ByZWZpeHVwcGVyfVZFUlNJT04gJHt2SGV4fSIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJ0eXBlZGVmIHN0cnVjdCB7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgaW50ICAgdl9oZXg7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl9zaG9ydDsiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICBjb25zdCBjaGFyICp2X2xvbmc7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl90ZXg7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl9nbnU7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl93ZWI7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl9zY2NzOyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIGNvbnN0IGNoYXIgKnZfcmNzOyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAifSAke3ByZWZpeH12ZXJzaW9uX3Q7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgImV4dGVybiAke3ByZWZpeH12ZXJzaW9uX3QgJHtwcmVmaXh9dmVyc2lvbjsiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2VuZGlmIC8qIF8ke2ZpbGVzdHJ9XyAqLyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjZWxzZSAvKiBfJHtmaWxlc3RyfV9BU19IRUFERVJfICovIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiNkZWZpbmUgXyR7ZmlsZXN0cn1fQVNfSEVBREVSXyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2luY2x1ZGUgXCIke2ZpbGV9XCIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiN1bmRlZiAgXyR7ZmlsZXN0cn1fQVNfSEVBREVSXyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIke3ByZWZpeH12ZXJzaW9uX3QgJHtwcmVmaXh9dmVyc2lvbiA9IHsiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICAke3ZIZXh9LCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2U2hvcnR9XCIsIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgXCIke3ZMb25nfVwiLCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2VGVYfVwiLCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2R05VfVwiLCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2V2VifVwiLCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2U0NDU31cIiwiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICBcIiR7dlJDU31cIiIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAifTsiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2VuZGlmIC8qIF8ke2ZpbGVzdHJ9X0FTX0hFQURFUl8gKi8iCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIG00ICkKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiMjICAke2ZpbGV9IC0tIFZlcnNpb24gSW5mb3JtYXRpb24gZm9yICR7bmFtZX0gKHN5bnRheDogTTQpIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgW2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IEdOVSBzaHRvb2xdIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3ZfaGV4XSwgICBbJHt2SGV4fV0pIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3Zfc2hvcnRdLCBbJHt2U2hvcnR9XSkiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIm00X2RlZmluZShbdl9sb25nXSwgIFske3ZMb25nfV0pIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3ZfdGV4XSwgICBbJHt2VGVYfV0pIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3ZfZ251XSwgICBbJHt2R05VfV0pIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3Zfd2ViXSwgICBbJHt2V2VifV0pIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3Zfc2Njc10sICBbJHt2U0NDU31dKSIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAibTRfZGVmaW5lKFt2X3Jjc10sICAgWyR7dlJDU31dKSIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgcGVybCApCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiMjIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgJHtmaWxlfSAtLSBWZXJzaW9uIEluZm9ybWF0aW9uIGZvciAke25hbWV9IChzeW50YXg6IFBlcmwpIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgW2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IEdOVSBzaHRvb2xdIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJvdXIgXCQke3ByZWZpeH12ZXJzaW9uID0geyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgICd2X2hleCcgICA9PiAke3ZIZXh9LCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgICd2X3Nob3J0JyA9PiBcIiR7dlNob3J0fVwiLCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgICd2X2xvbmcnICA9PiBcIiR7dkxvbmd9XCIsIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgJ3ZfdGV4JyAgID0+IFwiJHt2VGVYfVwiLCIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgICd2X2dudScgICA9PiBcIiR7dkdOVX1cIiwiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICAndl93ZWInICAgPT4gXCIke3ZXZWJ9XCIsIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgJ3Zfc2NjcycgID0+IFwiJHt2U0NDU31cIiwiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICAndl9yY3MnICAgPT4gXCJcXCR7dlJDU30vXCIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIn07IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIjE7IgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBweXRob24gKQogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMgICR7ZmlsZX0gLS0gVmVyc2lvbiBJbmZvcm1hdGlvbiBmb3IgJHtuYW1lfSAoc3ludGF4OiBQeXRob24pIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgW2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IEdOVSBzaHRvb2xdIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJjbGFzcyAke3ByZWZpeH12ZXJzaW9uOiIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfaGV4ICAgICAgID0gJHt2SGV4fSIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfc2hvcnQgICAgID0gXCIke3ZTaG9ydH1cIiIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfbG9uZyAgICAgID0gXCIke3ZMb25nfVwiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgdl90ZXggICAgICAgPSBcIiR7dlRlWH1cIiIKICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfZ251ICAgICAgID0gXCIke3ZHTlV9XCIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICB2X3dlYiAgICAgICA9IFwiJHt2V2VifVwiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgdl9zY2NzICAgICAgPSBcIiR7dlNDQ1N9XCIiCiAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICB2X3JjcyAgICAgICA9IFwiJHt2UkNTfVwiIgogICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAqICkgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24gXGAtbCc6IFxgJG9wdF9sJyIgMT4mMgogICAgICAgICAgICAgICAgc2h0b29sX2V4aXQgMQogICAgICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICBmaQoKICAgIHNodG9vbF9leGl0IDAKICAgIDs7CgpwYXRoICkKICAgICMjCiAgICAjIyAgcGF0aCAtLSBEZWFsIHdpdGggcHJvZ3JhbSBwYXRocwogICAgIyMgIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CiAgICAjIwoKICAgIG5hbWVsaXN0PSIkKiIKCiAgICAjICAgY2hlY2sgd2hldGhlciB0aGUgdGVzdCBjb21tYW5kIHN1cHBvcnRzIHRoZSAteCBvcHRpb24KICAgIGlmIFsgLXggL2Jpbi9zaCBdIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbWludXN4PSIteCIKICAgIGVsc2UKICAgICAgICBtaW51c3g9Ii1yIgogICAgZmkKCiAgICAjICAgc3BsaXQgcGF0aCBzdHJpbmcKICAgIHBhdGhzPSJgZWNobyAkb3B0X3AgfFwKICAgICAgICAgICAgc2VkIC1lICdzL146Ly46LycgXAogICAgICAgICAgICAgICAgLWUgJ3MvOjovOi46L2cnIFwKICAgICAgICAgICAgICAgIC1lICdzLzokLzouLycgXAogICAgICAgICAgICAgICAgLWUgJ3MvOi8gL2cnYCIKCiAgICAjICAgU1BFQ0lBTCBSRVFVRVNUCiAgICAjICAgdHJhbnNsYXRlIGZvcndhcmQgdG8gcmV2ZXJzZSBwYXRoCiAgICBpZiBbICIuJG9wdF9yIiA9IC55ZXMgXTsgdGhlbgogICAgICAgIGlmIFsgIngkbmFtZWxpc3QiID0gInguIiBdOyB0aGVuCiAgICAgICAgICAgIHJwPScuJwogICAgICAgIGVsc2UKICAgICAgICAgICAgcnA9JycKICAgICAgICAgICAgZm9yIHBlIGluIGBJRlM9IiRJRlMvIjsgZWNobyAkbmFtZWxpc3RgOyBkbwogICAgICAgICAgICAgICAgcnA9Ii4uLyRycCIKICAgICAgICAgICAgZG9uZQogICAgICAgIGZpCiAgICAgICAgZWNobyAkcnAgfCBzZWQgLWUgJ3M6LyQ6OicKICAgICAgICBzaHRvb2xfZXhpdCAwCiAgICBmaQoKICAgICMgICBTUEVDSUFMIFJFUVVFU1QKICAgICMgICBzdHJpcCBvdXQgZGlyZWN0b3J5IG9yIGJhc2UgbmFtZQogICAgaWYgWyAiLiRvcHRfZCIgPSAueWVzIF07IHRoZW4KICAgICAgICBlY2hvICIkbmFtZWxpc3QiIHxcCiAgICAgICAgc2VkIC1lICdzO1teL10qJDs7JyAtZSAncztcKC5cKS8kO1wxOycKICAgICAgICBzaHRvb2xfZXhpdCAwCiAgICBmaQogICAgaWYgWyAiLiRvcHRfYiIgPSAueWVzIF07IHRoZW4KICAgICAgICBlY2hvICIkbmFtZWxpc3QiIHxcCiAgICAgICAgc2VkIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7JwogICAgICAgIHNodG9vbF9leGl0IDAKICAgIGZpCgogICAgIyAgIE1BR0lDIFNJVFVBVElPTgogICAgIyAgIFBlcmwgSW50ZXJwcmV0ZXIgKHBlcmwpCiAgICBpZiBbICIuJG9wdF9tIiA9IC55ZXMgXSAmJiBbICIuJG5hbWVsaXN0IiA9IC5wZXJsIF07IHRoZW4KICAgICAgICBybSAtZiAkdG1wZmlsZSA+L2Rldi9udWxsIDI+JjEKICAgICAgICB0b3VjaCAkdG1wZmlsZQogICAgICAgIGZvdW5kPTAKICAgICAgICBwYz05OQogICAgICAgIGZvciBkaXIgaW4gJHBhdGhzOyBkbwogICAgICAgICAgICBkaXI9YGVjaG8gJGRpciB8IHNlZCAtZSAnczsvKiQ7OydgCiAgICAgICAgICAgIG5jPTk5CiAgICAgICAgICAgIGZvciBuYW1lIGluIHBlcmwgcGVybDUgbWluaXBlcmw7IGRvCiAgICAgICAgICAgICAgICAgaWYgWyAkbWludXN4ICIkZGlyLyRuYW1lIiBdICYmIFsgISAtZCAiJGRpci8kbmFtZSIgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICBwZXJsPSIkZGlyLyRuYW1lIgogICAgICAgICAgICAgICAgICAgICBwdj1gJHBlcmwgLWUgJ3ByaW50ZigiJS4zZiIsICRdKTsnYAogICAgICAgICAgICAgICAgICAgICBlY2hvICIkcHY6JHBjOiRuYzokcGVybCIgPj4kdG1wZmlsZQogICAgICAgICAgICAgICAgICAgICBmb3VuZD0xCiAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICBuYz1gZXhwciAkbmMgLSAxYAogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIHBjPWBleHByICRwYyAtIDFgCiAgICAgICAgZG9uZQogICAgICAgIGlmIFsgJGZvdW5kID0gMSBdOyB0aGVuCiAgICAgICAgICAgIHBlcmw9ImBjYXQgJHRtcGZpbGUgfCBzb3J0IC1yIC11IHwgc2VkIC1lICdxJyB8IGN1dCAtZDogLWY0YCIKICAgICAgICAgICAgcm0gLWYgJHRtcGZpbGUgPi9kZXYvbnVsbCAyPiYxCiAgICAgICAgICAgIGVjaG8gIiRwZXJsIgogICAgICAgICAgICBzaHRvb2xfZXhpdCAwCiAgICAgICAgZmkKICAgICAgICBybSAtZiAkdG1wZmlsZSA+L2Rldi9udWxsIDI+JjEKICAgICAgICBzaHRvb2xfZXhpdCAxCiAgICBmaQoKICAgICMgICBNQUdJQyBTSVRVQVRJT04KICAgICMgICBDIHByZS1wcm9jZXNzb3IgKGNwcCkKICAgIGlmIFsgIi4kb3B0X20iID0gLnllcyBdICYmIFsgIi4kbmFtZWxpc3QiID0gLmNwcCBdOyB0aGVuCiAgICAgICAgZWNobyA+JHRtcGZpbGUuYyAiI2luY2x1ZGUgPGFzc2VydC5oPiIKICAgICAgICBlY2hvID4+JHRtcGZpbGUuYyAiU3ludGF4IEVycm9yIgogICAgICAgICMgICAxLiB0cnkgdGhlIHN0YW5kYXJkIGNjIC1FIGFwcHJvYWNoCiAgICAgICAgY3BwPSIke0NDLWNjfSAtRSIKICAgICAgICAoZXZhbCAiJGNwcCAkdG1wZmlsZS5jID4vZGV2L251bGwiKSAyPiR0bXBmaWxlLm91dAogICAgICAgIG15X2Vycm9yPWBncmVwIC12ICdeICorJyAkdG1wZmlsZS5vdXRgCiAgICAgICAgaWYgWyAiLiRteV9lcnJvciIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICMgICAyLiB0cnkgdGhlIGNjIC1FIGFwcHJvYWNoIGFuZCBHQ0MncyAtdHJhZGl0aW9uYWwtY2NwIG9wdGlvbgogICAgICAgICAgICBjcHA9IiR7Q0MtY2N9IC1FIC10cmFkaXRpb25hbC1jcHAiCiAgICAgICAgICAgIChldmFsICIkY3BwICR0bXBmaWxlLmMgPi9kZXYvbnVsbCIpIDI+JHRtcGZpbGUub3V0CiAgICAgICAgICAgIG15X2Vycm9yPWBncmVwIC12ICdeICorJyAkdG1wZmlsZS5vdXRgCiAgICAgICAgICAgIGlmIFsgIi4kbXlfZXJyb3IiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgIyAgIDMuIHRyeSBhIHN0YW5kYWxvbmUgY3BwIGNvbW1hbmQgaW4gcGF0aCBhbmQgbGliIGRpcnMKICAgICAgICAgICAgICAgIGZvciBwYXRoIGluICRwYXRocyAvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliOyBkbwogICAgICAgICAgICAgICAgICAgIHBhdGg9YGVjaG8gJHBhdGggfCBzZWQgLWUgJ3M7LyokOzsnYAogICAgICAgICAgICAgICAgICAgIGlmIFsgJG1pbnVzeCAiJHBhdGgvY3BwIiBdICYmIFsgISAtZCAiJHBhdGgvY3BwIiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGNwcD0iJHBhdGgvY3BwIgogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICAgICBpZiBbICIuJGNwcCIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgKGV2YWwgIiRjcHAgJHRtcGZpbGUuYyA+L2Rldi9udWxsIikgMj4kdG1wZmlsZS5vdXQKICAgICAgICAgICAgICAgICAgICBteV9lcnJvcj1gZ3JlcCAtdiAnXiAqKycgJHRtcGZpbGUub3V0YAogICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kbXlfZXJyb3IiICE9IC4gXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAjICAgb2ssIHdlIGdhdmUgdXAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgY3BwPScnCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKICAgICAgICBybSAtZiAkdG1wZmlsZSA+L2Rldi9udWxsIDI+JjEKICAgICAgICBybSAtZiAkdG1wZmlsZS5jICR0bXBmaWxlLm91dCA+L2Rldi9udWxsIDI+JjEKICAgICAgICBpZiBbICIuJGNwcCIgIT0gLiBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIiRjcHAiCiAgICAgICAgICAgIHNodG9vbF9leGl0IDAKICAgICAgICBmaQogICAgICAgIHNodG9vbF9leGl0IDEKICAgIGZpCgogICAgIyAgIFNUQU5EQVJEIFNJVFVBVElPTgogICAgIyAgIGl0ZXJhdGUgb3ZlciBuYW1lcwogICAgZm9yIG5hbWUgaW4gJG5hbWVsaXN0OyBkbwogICAgICAgICMgICBpdGVyYXRlIG92ZXIgcGF0aHMKICAgICAgICBmb3IgcGF0aCBpbiAkcGF0aHM7IGRvCiAgICAgICAgICAgIHBhdGg9YGVjaG8gJHBhdGggfCBzZWQgLWUgJ3M7LyokOzsnYAogICAgICAgICAgICBpZiBbICRtaW51c3ggIiRwYXRoLyRuYW1lIiBdICYmIFsgISAtZCAiJHBhdGgvJG5hbWUiIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3MiICE9IC55ZXMgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGVjaG8gIiRwYXRoLyRuYW1lIgogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDAKICAgICAgICAgICAgZmkKICAgICAgICBkb25lCiAgICBkb25lCgogICAgc2h0b29sX2V4aXQgMQogICAgOzsKCmVzYWMKCnNodG9vbF9leGl0IDAKCg==