IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgT2JqZWN0IFBhc2NhbCBsYW5ndWFnZS4KIyBBc3N1bWVzIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIGluc3RhbGxlZDogZnBrLgoKIyBOb3RlOiBUaGlzIHRlc3QgZmFpbHMgd2l0aCBmcGsgMS4wLjEwIC4uLiAzLjAuMCB3aGVuIGFuIFVURi04IGxvY2FsZSBpcwojIHByZXNlbnQsIGJlY2F1c2UgZnBrIGlnbm9yZXMgdGhlIGxvY2FsZSdzIGVuY29kaW5nLiBJdCBzdXBwb3J0cyBvbmx5IHVuaWJ5dGUKIyBsb2NhbGVzLiBUaGlzIGhlcmUgaXMgYSBxdWljayB3b3JrYXJvdW5kOgpVVEY4X0xPQ0FMRV9VTlNVUFBPUlRFRD15ZXMKCmNhdCA8PFxFT0YgPiBwYXNjYWxwcm9nLnBwCnByb2dyYW0gcGFzY2FscHJvZzsKeyRtb2RlIGRlbHBoaX0KCnVzZXMgZ2V0dGV4dCwgc3lzdXRpbHM7CgpyZXNvdXJjZXN0cmluZwogIHF1ZXN0aW9uID0gJycnWW91ciBjb21tYW5kLCBwbGVhc2U/JycsIGFza2VkIHRoZSB3YWl0ZXIuJzsKICBjdXJyZW5jaWVzID0gJyVzIGlzIHJlcGxhY2VkIGJ5ICVzLic7CgpiZWdpbgogIHRyYW5zbGF0ZXJlc291cmNlc3RyaW5ncygnJXMvTENfTUVTU0FHRVMvcGFzY2FscHJvZy5tbycpOwogIHdyaXRlbG4ocXVlc3Rpb24pOwogIHdyaXRlbG4oZm9ybWF0KGN1cnJlbmNpZXMsIFsnRkYnLCAnRVVSJ10pKTsKZW5kLgpFT0YKCihwcGMzODYgcGFzY2FscHJvZy5wcCkgPi9kZXYvbnVsbCAyPiYxIHx8CihwcGN4NjQgcGFzY2FscHJvZy5wcCkgPi9kZXYvbnVsbCAyPiYxIHx8CnsKICBlY2hvICJTa2lwcGluZyB0ZXN0OiBQYXNjYWwgY29tcGlsZXIgcHBjMzg2IG9yIHBwY3g2NCBub3QgZm91bmQiCiAgRXhpdCA3Nwp9Cgo6ICR7WEdFVFRFWFQ9eGdldHRleHR9CiMgZnBjIDMuMC4wIG9yIG5ld2VyIHByb2R1Y2VzIGEgLnJzaiBmaWxlIGluc3RlYWQgb2YgYSAucnN0IGZpbGUuCmlmIHRlc3QgLWYgcGFzY2FscHJvZy5yc2o7IHRoZW4KICBzdWZmaXg9cnNqCmVsc2UKICBzdWZmaXg9cnN0CmZpCiR7WEdFVFRFWFR9IC1vIHBhc2NhbHByb2cudG1wIC0tb21pdC1oZWFkZXIgLS1hZGQtbG9jYXRpb24gcGFzY2FscHJvZy4ke3N1ZmZpeH0gfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBwYXNjYWxwcm9nLnRtcCA+IHBhc2NhbHByb2cucG90IHx8IEV4aXQgMQoKY2F0IDw8RU9GID4gcGFzY2FscHJvZy5vawojOiBwYXNjYWxwcm9nLnF1ZXN0aW9uCm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiIgoKIzogcGFzY2FscHJvZy5jdXJyZW5jaWVzCiMsIG9iamVjdC1wYXNjYWwtZm9ybWF0Cm1zZ2lkICIlcyBpcyByZXBsYWNlZCBieSAlcy4iCm1zZ3N0ciAiIgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gcGFzY2FscHJvZy5vayBwYXNjYWxwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PFxFT0YgPiBmci5wbwptc2dpZCAiIgptc2dzdHIgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCgojOiBwYXNjYWxwcm9nLnF1ZXN0aW9uCm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLiIKCiMgUmV2ZXJzZSB0aGUgYXJndW1lbnRzLgojOiBwYXNjYWxwcm9nLmN1cnJlbmNpZXMKIywgb2JqZWN0LXBhc2NhbC1mb3JtYXQKbXNnaWQgIiVzIGlzIHJlcGxhY2VkIGJ5ICVzLiIKbXNnc3RyICIlMTpzIHJlbXBsYWNlICUwOnMuIgpFT0YKCjogJHtNU0dNRVJHRT1tc2dtZXJnZX0KJHtNU0dNRVJHRX0gLXEgLW8gZnIucG8udG1wIGZyLnBvIHBhc2NhbHByb2cucG90IHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgZnIucG8udG1wID4gZnIucG8ubmV3IHx8IEV4aXQgMQoKOiAke0RJRkY9ZGlmZn0KJHtESUZGfSBmci5wbyBmci5wby5uZXcgfHwgRXhpdCAxCgp0ZXN0IC1kIGZyIHx8IG1rZGlyIGZyCnRlc3QgLWQgZnIvTENfTUVTU0FHRVMgfHwgbWtkaXIgZnIvTENfTUVTU0FHRVMKCjogJHtNU0dGTVQ9bXNnZm10fQoke01TR0ZNVH0gLW8gZnIvTENfTUVTU0FHRVMvcGFzY2FscHJvZy5tbyBmci5wbwoKOiAke0RJRkY9ZGlmZn0KY2F0IDw8XEVPRiA+IHBhc2NhbHByb2cub2sKq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLgpFVVIgcmVtcGxhY2UgRkYuCkVPRgpjYXQgPDxcRU9GID4gcGFzY2FscHJvZy5va3UKwqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0wrssIGRpdCBsZSBnYXLDp29uLgpFVVIgcmVtcGxhY2UgRkYuCkVPRgoKOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIHByZXBhcmVfbG9jYWxlXyBmciAkTE9DQUxFX0ZSCiAgTEFOR1VBR0U9IExDX0FMTD0gTENfTUVTU0FHRVM9IExDX0NUWVBFPSBMQU5HPSRMT0NBTEVfRlIgLi9wYXNjYWxwcm9nID4gcGFzY2FscHJvZy5vdXQgfHwgRXhpdCAxCiAgOiAke0RJRkY9ZGlmZn0KICAke0RJRkZ9IHBhc2NhbHByb2cub2sgcGFzY2FscHJvZy5vdXQgfHwgRXhpdCAxCmZpCmlmIHRlc3QgLXogIiRVVEY4X0xPQ0FMRV9VTlNVUFBPUlRFRCI7IHRoZW4KICBpZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUl9VVEY4CiAgICBMQU5HVUFHRT0gTENfQUxMPSBMQ19NRVNTQUdFUz0gTENfQ1RZUEU9IExBTkc9JExPQ0FMRV9GUl9VVEY4IC4vcGFzY2FscHJvZyA+IHBhc2NhbHByb2cub3V0IHx8IEV4aXQgMQogICAgOiAke0RJRkY9ZGlmZn0KICAgICR7RElGRn0gcGFzY2FscHJvZy5va3UgcGFzY2FscHJvZy5vdXQgfHwgRXhpdCAxCiAgZmkKICBpZiB0ZXN0ICRMT0NBTEVfRlIgPSBub25lICYmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ID0gbm9uZTsgdGhlbgogICAgaWYgdGVzdCAtZiAvdXNyL2Jpbi9sb2NhbGVkZWY7IHRoZW4KICAgICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gZnJlbmNoIGxvY2FsZSBpcyBpbnN0YWxsZWQiCiAgICBlbHNlCiAgICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IG5vIGZyZW5jaCBsb2NhbGUgaXMgc3VwcG9ydGVkIgogICAgZmkKICAgIEV4aXQgNzcKICBmaQplbHNlCiAgaWYgdGVzdCAkTE9DQUxFX0ZSID0gbm9uZTsgdGhlbgogICAgaWYgdGVzdCAtZiAvdXNyL2Jpbi9sb2NhbGVkZWY7IHRoZW4KICAgICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gdHJhZGl0aW9uYWwgZnJlbmNoIGxvY2FsZSBpcyBpbnN0YWxsZWQiCiAgICBlbHNlCiAgICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IG5vIHRyYWRpdGlvbmFsIGZyZW5jaCBsb2NhbGUgaXMgc3VwcG9ydGVkIgogICAgZmkKICAgIEV4aXQgNzcKICBmaQpmaQoKRXhpdCAwCg==