IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgVGNsIGxhbmd1YWdlLgojIEFzc3VtZXMgYW4gZnJfRlIgbG9jYWxlIGlzIGluc3RhbGxlZC4KIyBBc3N1bWVzIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIGluc3RhbGxlZDogdGNsLgoKIyBOb3RlOiBUaGlzIHRlc3QgZmFpbHMgb24gTWFjT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUKIyBidXQgbm90IGluIHRoZSBmcl9GUi5VVEYtOCBsb2NhbGUuIFByb2JhYmx5IGJlY2F1c2UgaW4gdGhlIGZyX0ZSIGxvY2FsZSwKIyBubF9sYW5naW5mbyhDT0RFU0VUKSByZXR1cm5zICIiLgoKIyBOb3RlOiBUaGlzIHRlc3QgZmFpbHMgb24gQ3lnd2luIDEuNy4yIGluIHRoZSBmcl9GUi5VVEYtOCBsb2NhbGUgYnV0IG5vdAojIGluIHRoZSBmcl9GUi5JU08tODg1OS0xIGxvY2FsZS4KCmNhdCA8PFxFT0YgPiBwcm9ncmFtLnRjbAojIS91c3IvYmluL2VudiB0Y2xzaApwYWNrYWdlIHJlcXVpcmUgbXNnY2F0Cjo6bXNnY2F0OjptY2xvYWQgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lIFtpbmZvIHNjcmlwdF1dIC4gbXNnc10KcHJvYyBfIHtzfSB7cmV0dXJuIFs6Om1zZ2NhdDo6bWMgJHNdfQpwdXRzIFtfICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iXQpwdXRzIFtmb3JtYXQgWzo6bXNnY2F0OjptYyAiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIl0gIkZGIiAiRVVSIl0KRU9GCgo6ICR7WEdFVFRFWFQ9eGdldHRleHR9CiR7WEdFVFRFWFR9IC1vIHByb2cudG1wIC0tb21pdC1oZWFkZXIgLWtfIHByb2dyYW0udGNsIHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgcHJvZy50bXAgPiBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PEVPRiA+IHByb2cub2sKIzogcHJvZ3JhbS50Y2w6NQptc2dpZCAiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIgptc2dzdHIgIiIKCiM6IHByb2dyYW0udGNsOjYKIywgdGNsLWZvcm1hdAptc2dpZCAiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIgptc2dzdHIgIiIKRU9GCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IHByb2cub2sgcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxcRU9GID4gZnIucG8KbXNnaWQgIiIKbXNnc3RyICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgoKIzogcHJvZ3JhbS50Y2w6NQptc2dpZCAiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIgptc2dzdHIgIqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0uywgZGl0IGxlIGdhcudvbi4iCgojIFJldmVyc2UgdGhlIGFyZ3VtZW50cy4KIzogcHJvZ3JhbS50Y2w6NgojLCB0Y2wtZm9ybWF0Cm1zZ2lkICIlcyBpcyByZXBsYWNlZCBieSAlcy4iCm1zZ3N0ciAiJTIkcyByZW1wbGFjZSAlMSRzLiIKRU9GCgo6ICR7TVNHTUVSR0U9bXNnbWVyZ2V9CiR7TVNHTUVSR0V9IC1xIC1vIGZyLnBvLnRtcCBmci5wbyBwcm9nLnBvdCB8fCBFeGl0IDEKTENfQUxMPUMgdHIgLWQgJ1xyJyA8IGZyLnBvLnRtcCA+IGZyLnBvLm5ldyB8fCBFeGl0IDEKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gZnIucG8gZnIucG8ubmV3IHx8IEV4aXQgMQoKdGVzdCAtZCBtc2dzIHx8IG1rZGlyIG1zZ3MKCjogJHtNU0dGTVQ9bXNnZm10fQoke01TR0ZNVH0gLS10Y2wgLWQgbXNncyAtbCBmciBmci5wbyB8fCBFeGl0IDEKCiMgVGVzdCBmb3IgcHJlc2VuY2Ugb2YgdGNsc2ggd2l0aCBtc2djYXQgZXh0ZW5zaW9uLgpjYXQgPDxcRU9GID4gdmVyc2lvbi50Y2wKcGFja2FnZSByZXF1aXJlIG1zZ2NhdApwdXRzICR0Y2xfdmVyc2lvbgpFT0YKKHRjbHNoIHZlcnNpb24udGNsKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsIFwKICB8fCB7IGVjaG8gIlNraXBwaW5nIHRlc3Q6IHRjbHNoIG5vdCBmb3VuZCBvciBtc2djYXQgZXh0ZW5zaW9uIG5vdCBwcmVzZW50IgogICAgICAgRXhpdCA3NwogICAgIH0KCjogJHtESUZGPWRpZmZ9CmNhdCA8PFxFT0YgPiBwcm9nLm9rCqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0uywgZGl0IGxlIGdhcudvbi4KRVVSIHJlbXBsYWNlIEZGLgpFT0YKY2F0IDw8XEVPRiA+IHByb2cub2t1CsKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdMK7LCBkaXQgbGUgZ2Fyw6dvbi4KRVVSIHJlbXBsYWNlIEZGLgpFT0YKCjogJHtMT0NBTEVfRlI9ZnJfRlJ9CjogJHtMT0NBTEVfRlJfVVRGOD1mcl9GUi5VVEYtOH0KaWYgdGVzdCAkTE9DQUxFX0ZSICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUgogIExBTkdVQUdFPSBMQU5HPSRMT0NBTEVfRlIgTENfTUVTU0FHRVM9IExDX0NUWVBFPSBMQ19BTEw9IHRjbHNoIHByb2dyYW0udGNsID4gcHJvZy50bXAgfHwgRXhpdCAxCiAgTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgJHtESUZGfSBwcm9nLm9rIHByb2cub3V0IHx8IEV4aXQgMQpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlJfVVRGOAogIExBTkdVQUdFPSBMQU5HPSRMT0NBTEVfRlJfVVRGOCBMQ19NRVNTQUdFUz0gTENfQ1RZUEU9IExDX0FMTD0gdGNsc2ggcHJvZ3JhbS50Y2wgPiBwcm9nLnRtcCB8fCBFeGl0IDEKICBMQ19BTEw9QyB0ciAtZCAnXHInIDwgcHJvZy50bXAgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IHByb2cub2t1IHByb2cub3V0IHx8IEV4aXQgMQpmaQppZiB0ZXN0ICRMT0NBTEVfRlIgPSBub25lICYmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ID0gbm9uZTsgdGhlbgogIGlmIHRlc3QgLWYgL3Vzci9iaW4vbG9jYWxlZGVmOyB0aGVuCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKICBlbHNlCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIHN1cHBvcnRlZCIKICBmaQogIEV4aXQgNzcKZmkKCkV4aXQgMAo=