REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 226.81 KB
Close
//lib/python3.8/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-38.pyc
Text
Base64
VQ0NCgAAAADA0i5lLAUEAOMAAAAAAAAAAAAAAAAAAAAAcwAAAEAAAABzlg4AAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAGQEZAhsEm0TWhMBAGQEZAVsFFoUZARkCWwVbRZaFgEAehBkBGQKbBRtF1oXAQBXAG4gBABlGGsKcsgBAAEAAQBkBGQLbBRtGVoXAQBZAG4CWAB6EGQEZAxsGm0bWhsBAFcAbiAEAGUYawpy+gEAAQABAGQEZAxsHG0bWhsBAFkAbgJYAHogZARkDWwdbR5aHgEAZARkDmwdbR9aH20gWiABAFcAbjIEAGUYawqQAXJOAQABAAEAZARkDWwNbR5aHgEAZARkDmwNbR9aH20gWiABAFkAbgJYAHoQZARkD2wNbSFaIgEAVwBuQgQAZRhrCpABcqIBAAEAAQB6EGQEZA9sI20hWiIBAFcAbhoEAGUYawqQAXKcAQABAAEAZAVaIlkAbgJYAFkAbgJYAHoQZARkEGwQbSRaJAEAVwBuJAQAZRhrCpABctgBAAEAAQBHAGQRZBKEAGQSgwJaJFkAbgJYAGUkgwBaJWQTZSVfAGQUZSVfJmUkgwBaJ2QVZSdfAGQWZSdfKGQWZSdfKWQWZSdfKmQWZSdfK2QWZSdfLGQXZBhkGWQaZBtkHGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmQvZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkOmQ7ZDxkPWQ+ZD9kQGRBZEJkQ2REZEVkRmRHZEhkSWRKZEtkTGRNZE5kT2RQZFFkUmRTZFRkVWRWZFdkWGRZZFpkW2RcZF1kXmRfZGBkYWRiZGNkZGRlZGZkZ2RoZGlkamRrZGxkbWRuZG9kcGRxZHJkc2R0ZHVkdmR3ZHhkeWR6ZHtkfGR9ZH5kf2SAZIFkgmSDZIRkhWSGZIdkiGSJZ3NaLWUuZQlqL4MBZAVkioUCGQBaMGUwZAQZAGSKawJaMWUxkANyVmUJajJaM2U0WjVlNlo3ZTRaOGU0WjllOmU7ZTxlPWU+ZS5lP2VAZUFlQmVDZwtaRG5g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bnRzCih0aGUgOmNsYXNzOmAnKyc8UGFyc2VyRWxlbWVudC5fX2FkZF9fPmAgb3BlcmF0b3JzIGNyZWF0ZSA6Y2xhc3M6YEFuZGAgZXhwcmVzc2lvbnMsCmFuZCB0aGUgc3RyaW5ncyBhcmUgYXV0by1jb252ZXJ0ZWQgdG8gOmNsYXNzOmBMaXRlcmFsYCBleHByZXNzaW9ucyk6OgoKICAgIGZyb20gcGlwLl92ZW5kb3IucHlwYXJzaW5nIGltcG9ydCBXb3JkLCBhbHBoYXMKCiAgICAjIGRlZmluZSBncmFtbWFyIG9mIGEgZ3JlZXRpbmcKICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCgogICAgaGVsbG8gPSAiSGVsbG8sIFdvcmxkISIKICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKVGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgZm9sbG93aW5nOjoKCiAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KClRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYW1tYXIgaXMgcXVpdGUgcmVhZGFibGUsIG93aW5nIHRvIHRoZQpzZWxmLWV4cGxhbmF0b3J5IGNsYXNzIG5hbWVzLCBhbmQgdGhlIHVzZSBvZiAnKycsICd8JyBhbmQgJ14nIG9wZXJhdG9ycy4KClRoZSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0IHJldHVybmVkIGZyb20KOmNsYXNzOmBQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nYCBjYW4gYmUKYWNjZXNzZWQgYXMgYSBuZXN0ZWQgbGlzdCwgYSBkaWN0aW9uYXJ5LCBvciBhbiBvYmplY3Qgd2l0aCBuYW1lZAphdHRyaWJ1dGVzLgoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaGFuZGxlcyBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkKdmV4aW5nIHdoZW4gd3JpdGluZyB0ZXh0IHBhcnNlcnM6CgogIC0gZXh0cmEgb3IgbWlzc2luZyB3aGl0ZXNwYWNlICh0aGUgYWJvdmUgcHJvZ3JhbSB3aWxsIGFsc28gaGFuZGxlCiAgICAiSGVsbG8sV29ybGQhIiwgIkhlbGxvICAsICBXb3JsZCAgISIsIGV0Yy4pCiAgLSBxdW90ZWQgc3RyaW5ncwogIC0gZW1iZWRkZWQgY29tbWVudHMKCgpHZXR0aW5nIFN0YXJ0ZWQgLQotLS0tLS0tLS0tLS0tLS0tLQpWaXNpdCB0aGUgY2xhc3NlcyA6Y2xhc3M6YFBhcnNlckVsZW1lbnRgIGFuZCA6Y2xhc3M6YFBhcnNlUmVzdWx0c2AgdG8Kc2VlIHRoZSBiYXNlIGNsYXNzZXMgdGhhdCBtb3N0IG90aGVyIHB5cGFyc2luZwpjbGFzc2VzIGluaGVyaXQgZnJvbS4gVXNlIHRoZSBkb2NzdHJpbmdzIGZvciBleGFtcGxlcyBvZiBob3cgdG86CgogLSBjb25zdHJ1Y3QgbGl0ZXJhbCBtYXRjaCBleHByZXNzaW9ucyBmcm9tIDpjbGFzczpgTGl0ZXJhbGAgYW5kCiAgIDpjbGFzczpgQ2FzZWxlc3NMaXRlcmFsYCBjbGFzc2VzCiAtIGNvbnN0cnVjdCBjaGFyYWN0ZXIgd29yZC1ncm91cCBleHByZXNzaW9ucyB1c2luZyB0aGUgOmNsYXNzOmBXb3JkYAogICBjbGFzcwogLSBzZWUgaG93IHRvIGNyZWF0ZSByZXBldGl0aXZlIGV4cHJlc3Npb25zIHVzaW5nIDpjbGFzczpgWmVyb09yTW9yZWAKICAgYW5kIDpjbGFzczpgT25lT3JNb3JlYCBjbGFzc2VzCiAtIHVzZSA6Y2xhc3M6YCcrJzxBbmQ+YCwgOmNsYXNzOmAnfCc8TWF0Y2hGaXJzdD5gLCA6Y2xhc3M6YCdeJzxPcj5gLAogICBhbmQgOmNsYXNzOmAnJic8RWFjaD5gIG9wZXJhdG9ycyB0byBjb21iaW5lIHNpbXBsZSBleHByZXNzaW9ucyBpbnRvCiAgIG1vcmUgY29tcGxleCBvbmVzCiAtIGFzc29jaWF0ZSBuYW1lcyB3aXRoIHlvdXIgcGFyc2VkIHJlc3VsdHMgdXNpbmcKICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lYAogLSBhY2Nlc3MgdGhlIHBhcnNlZCBkYXRhLCB3aGljaCBpcyByZXR1cm5lZCBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYAogICBvYmplY3QKIC0gZmluZCBzb21lIGhlbHBmdWwgZXhwcmVzc2lvbiBzaG9ydC1jdXRzIGxpa2UgOmNsYXNzOmBkZWxpbWl0ZWRMaXN0YAogICBhbmQgOmNsYXNzOmBvbmVPZmAKIC0gZmluZCBtb3JlIHVzZWZ1bCBjb21tb24gZXhwcmVzc2lvbnMgaW4gdGhlIDpjbGFzczpgcHlwYXJzaW5nX2NvbW1vbmAKICAgbmFtZXNwYWNlIGNsYXNzCnoFMi40LjJ6FTI5IEp1bCAyMDE5IDAyOjU4IFVUQ3oqUGF1bCBNY0d1aXJlIDxwdG1jZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+6QAAAABOKQHaA3JlZikB2ghkYXRldGltZSkB2gppdGVtZ2V0dGVyKQHaBXdyYXBzKQHaC2ZpbHRlcmZhbHNlKQHaDGlmaWx0ZXJmYWxzZSkB2gVSTG9jaykB2ghJdGVyYWJsZSkC2g5NdXRhYmxlTWFwcGluZ9oHTWFwcGluZykB2gtPcmRlcmVkRGljdCkB2g9TaW1wbGVOYW1lc3BhY2VjAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAcwwAAABlAFoBZABaAmQBUwApAnINAAAATikD2ghfX25hbWVfX9oKX19tb2R1bGVfX9oMX19xdWFsbmFtZV9fqQByEQAAAHIRAAAA+jkvdXNyL2xpYi9weXRob24zLjgvc2l0ZS1wYWNrYWdlcy9waXAvX3ZlbmRvci9weXBhcnNpbmcucHlyDQAAAJUAAABzAgAAAAgAcg0AAABhQQIAAAogICAgQSBjcm9zcy12ZXJzaW9uIGNvbXBhdGliaWxpdHkgY29uZmlndXJhdGlvbiBmb3IgcHlwYXJzaW5nIGZlYXR1cmVzIHRoYXQgd2lsbCBiZQogICAgcmVsZWFzZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gQnkgc2V0dGluZyB2YWx1ZXMgaW4gdGhpcyBjb25maWd1cmF0aW9uIHRvIFRydWUsCiAgICB0aG9zZSBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBpbiBwcmlvciB2ZXJzaW9ucyBmb3IgY29tcGF0aWJpbGl0eSBkZXZlbG9wbWVudAogICAgYW5kIHRlc3RpbmcuCgogICAgIC0gY29sbGVjdF9hbGxfQW5kX3Rva2VucyAtIGZsYWcgdG8gZW5hYmxlIGZpeCBmb3IgSXNzdWUgIzYzIHRoYXQgZml4ZXMgZXJyb25lb3VzIGdyb3VwaW5nCiAgICAgICBvZiByZXN1bHRzIG5hbWVzIHdoZW4gYW4gQW5kIGV4cHJlc3Npb24gaXMgbmVzdGVkIHdpdGhpbiBhbiBPciBvciBNYXRjaEZpcnN0OyBzZXQgdG8KICAgICAgIFRydWUgdG8gZW5hYmxlIGJ1Z2ZpeCByZWxlYXNlZCBpbiBweXBhcnNpbmcgMi4zLjAsIG9yIEZhbHNlIHRvIHByZXNlcnZlCiAgICAgICBwcmUtMi4zLjAgaGFuZGxpbmcgb2YgbmFtZWQgcmVzdWx0cwpUYZMDAAAKRGlhZ25vc3RpYyBjb25maWd1cmF0aW9uIChhbGwgZGVmYXVsdCB0byBGYWxzZSkKICAgICAtIHdhcm5fbXVsdGlwbGVfdG9rZW5zX2luX25hbWVkX2FsdGVybmF0aW9uIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hlbiBhIHJlc3VsdHMKICAgICAgIG5hbWUgaXMgZGVmaW5lZCBvbiBhIE1hdGNoRmlyc3Qgb3IgT3IgZXhwcmVzc2lvbiB3aXRoIG9uZSBvciBtb3JlIEFuZCBzdWJleHByZXNzaW9ucwogICAgICAgKG9ubHkgd2FybnMgaWYgX19jb21wYXRfXy5jb2xsZWN0X2FsbF9BbmRfdG9rZW5zIGlzIEZhbHNlKQogICAgIC0gd2Fybl91bmdyb3VwZWRfbmFtZWRfdG9rZW5zX2luX2NvbGxlY3Rpb24gLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGVuIGEgcmVzdWx0cwogICAgICAgbmFtZSBpcyBkZWZpbmVkIG9uIGEgY29udGFpbmluZyBleHByZXNzaW9uIHdpdGggdW5ncm91cGVkIHN1YmV4cHJlc3Npb25zIHRoYXQgYWxzbwogICAgICAgaGF2ZSByZXN1bHRzIG5hbWVzCiAgICAgLSB3YXJuX25hbWVfc2V0X29uX2VtcHR5X0ZvcndhcmQgLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGFuIGEgRm9yd2FyZCBpcyBkZWZpbmVkCiAgICAgICB3aXRoIGEgcmVzdWx0cyBuYW1lLCBidXQgaGFzIG5vIGNvbnRlbnRzIGRlZmluZWQKICAgICAtIHdhcm5fb25fbXVsdGlwbGVfc3RyaW5nX2FyZ3NfdG9fb25lb2YgLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGFuIG9uZU9mIGlzCiAgICAgICBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBtdWx0aXBsZSBzdHIgYXJndW1lbnRzCiAgICAgLSBlbmFibGVfZGVidWdfb25fbmFtZWRfZXhwcmVzc2lvbnMgLSBmbGFnIHRvIGF1dG8tZW5hYmxlIGRlYnVnIG9uIGFsbCBzdWJzZXF1ZW50CiAgICAgICBjYWxscyB0byBQYXJzZXJFbGVtZW50LnNldE5hbWUoKQpG2gtfX3ZlcnNpb25fX9oPX192ZXJzaW9uVGltZV9f2gpfX2F1dGhvcl9f2gpfX2NvbXBhdF9f2ghfX2RpYWdfX9oDQW5k2g9DYXNlbGVzc0tleXdvcmTaD0Nhc2VsZXNzTGl0ZXJhbNoKQ2hhcnNOb3RJbtoHQ29tYmluZdoERGljdNoERWFjaNoFRW1wdHnaCkZvbGxvd2VkQnnaB0ZvcndhcmTaCkdvVG9Db2x1bW7aBUdyb3Vw2gdLZXl3b3Jk2gdMaW5lRW5k2glMaW5lU3RhcnTaB0xpdGVyYWzaClByZWNlZGVkQnnaCk1hdGNoRmlyc3TaB05vTWF0Y2jaBk5vdEFuedoJT25lT3JNb3Jl2ghPbmx5T25jZdoIT3B0aW9uYWzaAk9y2hJQYXJzZUJhc2VFeGNlcHRpb27aE1BhcnNlRWxlbWVudEVuaGFuY2XaDlBhcnNlRXhjZXB0aW9u2g9QYXJzZUV4cHJlc3Npb27aE1BhcnNlRmF0YWxFeGNlcHRpb27aDFBhcnNlUmVzdWx0c9oUUGFyc2VTeW50YXhFeGNlcHRpb27aDVBhcnNlckVsZW1lbnTaDFF1b3RlZFN0cmluZ9oZUmVjdXJzaXZlR3JhbW1hckV4Y2VwdGlvbtoFUmVnZXjaBlNraXBUb9oJU3RyaW5nRW5k2gtTdHJpbmdTdGFydNoIU3VwcHJlc3PaBVRva2Vu2g5Ub2tlbkNvbnZlcnRlctoFV2hpdGXaBFdvcmTaB1dvcmRFbmTaCVdvcmRTdGFydNoKWmVyb09yTW9yZdoEQ2hhctoJYWxwaGFudW1z2gZhbHBoYXPaCmFscGhhczhiaXTaC2FueUNsb3NlVGFn2gphbnlPcGVuVGFn2g1jU3R5bGVDb21tZW502gNjb2zaEmNvbW1hU2VwYXJhdGVkTGlzdNoQY29tbW9uSFRNTEVudGl0edoMY291bnRlZEFycmF52g9jcHBTdHlsZUNvbW1lbnTaD2RibFF1b3RlZFN0cmluZ9oPZGJsU2xhc2hDb21tZW502g1kZWxpbWl0ZWRMaXN02gZkaWN0T2baDmRvd25jYXNlVG9rZW5z2gVlbXB0edoHaGV4bnVtc9oLaHRtbENvbW1lbnTaEGphdmFTdHlsZUNvbW1lbnTaBGxpbmXaB2xpbmVFbmTaCWxpbmVTdGFydNoGbGluZW5v2gxtYWtlSFRNTFRhZ3PaC21ha2VYTUxUYWdz2g5tYXRjaE9ubHlBdENvbNoRbWF0Y2hQcmV2aW91c0V4cHLaFG1hdGNoUHJldmlvdXNMaXRlcmFs2gpuZXN0ZWRFeHBy2g9udWxsRGVidWdBY3Rpb27aBG51bXPaBW9uZU9m2gdvcEFzc29j2hJvcGVyYXRvclByZWNlZGVuY2XaCnByaW50YWJsZXPaCHB1bmM4Yml02hJweXRob25TdHlsZUNvbW1lbnTaDHF1b3RlZFN0cmluZ9oMcmVtb3ZlUXVvdGVz2hFyZXBsYWNlSFRNTEVudGl0edoLcmVwbGFjZVdpdGjaCnJlc3RPZkxpbmXaD3NnbFF1b3RlZFN0cmluZ9oGc3Jhbmdl2glzdHJpbmdFbmTaC3N0cmluZ1N0YXJ02hB0cmFjZVBhcnNlQWN0aW9u2g11bmljb2RlU3RyaW5n2gx1cGNhc2VUb2tlbnPaDXdpdGhBdHRyaWJ1dGXaDWluZGVudGVkQmxvY2vaD29yaWdpbmFsVGV4dEZvctoHdW5ncm91cNoNaW5maXhOb3RhdGlvbtoLbG9jYXRlZEV4cHLaCXdpdGhDbGFzc9oKQ2xvc2VNYXRjaNoIdG9rZW5NYXDaEHB5cGFyc2luZ19jb21tb27aEXB5cGFyc2lu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A6AFZAqgCHwKahV8CmoKfAmhA6EBAQBuUHwJZAJrCZABcix0CXwJgwF9CnwDoAVkC6AIfApqFXwKagqhAqEBAQBuJnwIahJ9C3wLahNkDGsGkAFyQHGUfAOgBWQNoAh8C2oToQGhAQEAfAFkBDgAfQF8AXOUAQCQAXFmcZRkDqAWfAOhAVMAKQ9hcAQAAAogICAgICAgIE1ldGhvZCB0byB0YWtlIGFuIGV4Y2VwdGlvbiBhbmQgdHJhbnNsYXRlIHRoZSBQeXRob24gaW50ZXJuYWwgdHJhY2ViYWNrIGludG8gYSBsaXN0CiAgICAgICAgb2YgdGhlIHB5cGFyc2luZyBleHByZXNzaW9ucyB0aGF0IGNhdXNlZCB0aGUgZXhjZXB0aW9uIHRvIGJlIHJhaXNlZC4KCiAgICAgICAgUGFyYW1ldGVyczoKCiAgICAgICAgIC0gZXhjIC0gZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgcGFyc2luZyAobmVlZCBub3QgYmUgYSBQYXJzZUV4Y2VwdGlvbiwgaW4gc3VwcG9ydAogICAgICAgICAgIG9mIFB5dGhvbiBleGNlcHRpb25zIHRoYXQgbWlnaHQgYmUgcmFpc2VkIGluIGEgcGFyc2UgYWN0aW9uKQogICAgICAgICAtIGRlcHRoIChkZWZhdWx0PTE2KSAtIG51bWJlciBvZiBsZXZlbHMgYmFjayBpbiB0aGUgc3RhY2sgdHJhY2UgdG8gbGlzdCBleHByZXNzaW9uCiAgICAgICAgICAgYW5kIGZ1bmN0aW9uIG5hbWVzOyBpZiBOb25lLCB0aGUgZnVsbCBzdGFjayB0cmFjZSBuYW1lcyB3aWxsIGJlIGxpc3RlZDsgaWYgMCwgb25seQogICAgICAgICAgIHRoZSBmYWlsaW5nIGlucHV0IGxpbmUsIG1hcmtlciwgYW5kIGV4Y2VwdGlvbiBzdHJpbmcgd2lsbCBiZSBzaG93bgoKICAgICAgICBSZXR1cm5zIGEgbXVsdGktbGluZSBzdHJpbmcgbGlzdGluZyB0aGUgUGFyc2VyRWxlbWVudHMgYW5kL29yIGZ1bmN0aW9uIG5hbWVzIGluIHRoZQogICAgICAgIGV4Y2VwdGlvbidzIHN0YWNrIHRyYWNlLgoKICAgICAgICBOb3RlOiB0aGUgZGlhZ25vc3RpYyBvdXRwdXQgd2lsbCBpbmNsdWRlIHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGV4cHJlc3Npb25zCiAgICAgICAgdGhhdCBmYWlsZWQgdG8gcGFyc2UuIFRoZXNlIHJlcHJlc2VudGF0aW9ucyB3aWxsIGJlIG1vcmUgaGVscGZ1bCBpZiB5b3UgdXNlIGBzZXROYW1lYCB0bwogICAgICAgIGdpdmUgaWRlbnRpZmlhYmxlIG5hbWVzIHRvIHlvdXIgZXhwcmVzc2lvbnMuIE90aGVyd2lzZSB0aGV5IHdpbGwgdXNlIHRoZSBkZWZhdWx0IHN0cmluZwogICAgICAgIGZvcm1zLCB3aGljaCBtYXkgYmUgY3J5cHRpYyB0byByZWFkLgoKICAgICAgICBleHBsYWluKCkgaXMgb25seSBzdXBwb3J0ZWQgdW5kZXIgUHl0aG9uIDMuCiAgICAgICAgcgEAAABO+gEgcqAAAAD6AV56CHswfTogezF9KQHaB2NvbnRleHRyvwAAACkC2glwYXJzZUltcGzaDV9wYXJzZU5vQ2FjaGV6DXswfS57MX0gLSB7Mn16B3swfS57MX0pAtoHd3JhcHBlcnoIPG1vZHVsZT56A3swfdoBCikX2gdpbnNwZWN0cpUAAADaEWdldHJlY3Vyc2lvbmxpbWl0cpAAAAByMAAAANoGYXBwZW5kclsAAAByTQAAANoGZm9ybWF0ctMAAAByDgAAAFoOZ2V0aW5uZXJmcmFtZXPaDV9fdHJhY2ViYWNrX1/aA3NldNoJZW51bWVyYXRl2ghmX2xvY2Fsc9oDZ2V0cjcAAADaBmZfY29kZdoHY29fbmFtZdoDYWRkcg8AAAByzwAAACkM2gNleGPaBWRlcHRoct8AAABymgAAAFoHY2FsbGVyc9oEc2VlbtoBaVoCZmZaA2ZybVoGZl9zZWxmWglzZWxmX3R5cGXaBGNvZGVyEQAAAHIRAAAAchIAAADaB2V4cGxhaW56AQAAc0wAAAAAGAgCCAEIAQQBCgEMARgBGAIKARABBgEaAQgCDgEMAQwBAgEIAQIBCgIIAQwBBAEC/ggDCgEIAQwBBP8IAwYBDAECAhICCAEEAQgCehZQYXJzZUV4Y2VwdGlvbi5leHBsYWluTikBctcAAAAp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IGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgZGF0ZV9zdHIgPSAoaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgieWVhciIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJwogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQogICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICMgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgIyBwYXJzZVN0cmluZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQoKICAgIHByaW50czo6CgogICAgICAgIGxpc3QocmVzdWx0KSAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KICAgICAgICByZXN1bHRbMF0gLT4gJzE5OTknCiAgICAgICAgcmVzdWx0Wydtb250aCddIC0+ICcxMicKICAgICAgICByZXN1bHQuZGF5IC0+ICczMScKICAgICAgICAnbW9udGgnIGluIHJlc3VsdCAt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OgoKICAgICAgICAgICAgZGVmIHJlbW92ZV9maXJzdCh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgwKQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkucGFyc2VTdHJpbmcoIjAgMTIzIDMyMSIpKSAjIC0+IFsnMCcsICcxMjMnLCAnMzIxJ10KICAgICAgICAgICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9maXJzdCkucGFyc2VTdHJpbmcoIjAgMTIzIDMyMSIpKSAjIC0+IFsnMTIzJywgJzMyMSddCgogICAgICAgICAgICBsYWJlbCA9IFdvcmQoYWxwaGFzKQogICAgICAgICAgICBwYXR0ID0gbGFiZWwoIkxBQkVMIikgKyBPbmVPck1vcmUoV29yZChudW1zKSkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCgogICAgICAgICAgICAjIFVzZSBwb3AoKSBpbiBhIHBhcnNlIGFjdGlvbiB0byByZW1vdmUgbmFtZWQgcmVzdWx0IChub3RlIHRoYXQgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBub3QKICAgICAgICAgICAgIyByZW1vdmVkIGZyb20gbGlzdCBmb3JtIG9mIHJlc3VsdHMpCiAgICAgICAgICAgIGRlZiByZW1vdmVfTEFCRUwodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5wb3AoIkxBQkVMIikKICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbnMKICAgICAgICAgICAgcGF0dC5hZGRQYXJzZUFjdGlvbihyZW1vdmVfTEFCRUwpCiAgICAgICAgICAgIHByaW50KHBhdHQucGFyc2VTdHJpbmcoIkFBQiAxMjMgMzIxIikuZHVtcCgpKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgWydBQUInLCAnMTIzJywgJzMyMSddCiAgICAgICAgICAgIC0gTEFCRUw6IEFBQgoKICAgICAgICAgICAgWydBQUInLCAnMTIzJywgJzMyMSdd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ICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygnMTIvMzEvMTk5OScpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0KSwgcmVwcihyZXN1bHQpKSAjIC0+IDxjbGFzcyAncHlwYXJzaW5nLlBhcnNlUmVzdWx0cyc+IChbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10sIHsnZGF5JzogWygnMTk5OScsIDQpXSwgJ3llYXInOiBbKCcxMicsIDApXSwgJ21vbnRoJzogWygnMzEnLCAyKV19KQoKICAgICAgICAgICAgcmVzdWx0X2RpY3QgPSByZXN1bHQuYXNEaWN0KCkKICAgICAgICAgICAgcHJpbnQodHlwZShyZXN1bHRfZGljdCksIHJlcHIocmVzdWx0X2RpY3QpKSAjIC0+IDxjbGFzcyAnZGljdCc+IHsnZGF5JzogJzE5OTknLCAneWVhcic6ICcxMicsICdtb250aCc6ICczMSd9CgogICAgICAgICAgICAjIGV2ZW4gdGhvdWdoIGEgUGFyc2VSZXN1bHRzIHN1cHBvcnRzIGRpY3QtbGlrZSBhY2Nlc3MsIHNvbWV0aW1lIHlvdSBqdXN0IG5lZWQgdG8gaGF2ZSBhIGRpY3QKICAgICAgICAgICAgaW1wb3J0IGpzb24KICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKSAjIC0+IEV4Y2VwdGlvbjogVHlwZUVycm9yOiAuLi4gaXMgbm90IEpTT04gc2VyaWFsaXphYmxlCiAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LmFzRGljdCgpKSkgIyAtPiB7Im1vbnRoIjogIjMxIiwgImRheSI6ICIxOTk5IiwgInllYXIiOiAiMTIifQogICAgICAgIGMBAAAAAAAAAAAAAAABAAAAAwAAABMAAABz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BhYAoQEBAHHyfAWgAGQKfAFkBnwEFAB8CnwBZAZ8BGQHFwAUAHQBfAuDAWYGFgChAQEAcfJkAqAMfAWhAVMAKQthRgIAAAogICAgICAgIERpYWdub3N0aWMgbWV0aG9kIGZvciBsaXN0aW5nIG91dCB0aGUgY29udGVudHMgb2YKICAgICAgICBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYC4gQWNjZXB0cyBhbiBvcHRpb25hbCBgYGluZGVudGBgIGFyZ3VtZW50IHNvCiAgICAgICAgdGhhdCB0aGlzIHN0cmluZyBjYW4gYmUgZW1iZWRkZWQgaW4gYSBuZXN0ZWQgZGlzcGxheSBvZiBvdGhlciBkYXRhLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygnMTIvMzEvMTk5OScpCiAgICAgICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10KICAgICAgICAgICAgLSBkYXk6IDE5OTkKICAgICAgICAgICAgLSBtb250aDogMzEKICAgICAgICAgICAgLSB5ZWFyOiAxMgogICAgICAgIHLeAAAAcqsAAABjAQAAAAAAAAAAAAAAAwAAAAMAAABzAAAAcx4AAAB8AF0WXAJ9AX0CdAB8AYMBfAJmAlYAAQBxAmQAUwBynAAAACkBcpIAAAByYQEAAHIRAAAAchEAAAByEgAAAHKfAAAAPwQAAHMEAAAABAAGAHokUGFyc2VSZXN1bHRzLmR1bXAuPGxvY2Fscz4uPGdlbmV4cHI+egolcyVzLSAlczogcmUBAAByoAAAACkEcmoBAADaBGZ1bGzaDGluY2x1ZGVfbGlzdNoGX2RlcHRoYwEAAAAAAAAAAAAAAAIAAAAEAAAAcwAAAHMYAAAAfABd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dHJpbmcKICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUKICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nYCBmb3IgbW9yZQogICBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBgYDxUQUI+YGAgcywgYW5kIHN1Z2dlc3RlZAogICBtZXRob2RzIHRvIG1haW50YWluIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UKICAgbG9jYXRpb24sIGFuZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHdpdGhpbiB0aGUgcGFyc2VkIHN0cmluZy4KICAgcgEAAAByoAAAAHLeAAAAKQJyyQAAANoFcmZpbmQpA3K7AAAA2gRzdHJncqMAAAByEQAAAHIRAAAAchIAAAByTQAAALMEAABzBAAAAAALBAFjAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAcxIAAAB8AaAAZAFkAnwAoQNkAxcAUwApBGH5AQAAUmV0dXJucyBjdXJyZW50IGxpbmUgbnVtYmVyIHdpdGhpbiBhIHN0cmluZywgY291bnRpbmcgbmV3bGluZXMgYXMgbGluZSBzZXBhcmF0b3JzLgogICAgVGhlIGZpcnN0IGxpbmUgaXMgbnVtYmVyIDEuCgogICAgTm90ZSAtIHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgOmNsYXNzOmBQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nYAogICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgYGA8VEFCPmBgIHMsIGFuZAogICAgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZQogICAgcGFyc2UgbG9jYXRpb24sIGFuZCBs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BQYBBgUEAw4BFAIWGwQBAgEGAQr/CAIOAQ4BBgJytwAAAGMAAAAAAAAAAAAAAAAAAAAABwAAAAAAAABzqgIAAGUAWgFkAFoCZAFaA2QCWgRkA1oFZQZkBGQFhACDAVoHZQZkBmQHhACDAVoIZIxkCGQJhAFaCWQKZAuEAFoKZAxkDYQAWgtkjWQOZA+EAVoMZI5kEGQRhAFaDWSPZBNkFIQBWg5kFWQWhABaD2QXZBiEAFoQZBlkGoQAWhFkG2QchABaEmQdZB6EAFoTZB9kIIQAWhRkkGQhZCKEAVoVZCNkJIQAWhZkkWQlZCaEAVoXZCdkKIQAWhhkKWQqhABaGUcAZCtkLIQAZCxlGoMDWhtlHGQtawly6kcAZC5kL4QAZC9lGoMDWh1uEEcAZDBkL4QAZC9lGoMDWh1pAFoeZR+DAFogZDFkMWcCWiFkkmQyZDOEAVoiZRdaI2UGZDRkNYQAgwFaJGQDWiVlBmSTZDdkOIQBgwFaJmSUZDlkOoQBWidlKGQDZgJkO2Q8hAFaKWQ9ZD6EAFoqZShmAWQ/ZECEAVorZShkA2YCZEFkQoQBWixkQ2REhABaLWRFZEaEAFouZEdkSIQAWi9kSWRKhABaMGRLZEyEAFoxZE1kToQAWjJkT2RQhABaM2RRZFKEAFo0ZFNkVIQAWjVkVWRWhABaNmRXZFiEAFo3ZFlkWoQAWjhkW2RchABaOWRdZF6EAFo6ZF9kYIQAWjtklWRhZGKEAVo8ZGNkZIQAWj1kZWRmhABaPmRnZGiEAFo/ZGlkaoQAWkBka2RshABaQWRtZG6EAFpCZJZkb2RwhAFaQ2RxZHKEAFpEZHNkdIQAWkVkdWR2hABaRmR3ZHiEAFpHZJdkeWR6hAFaSGSYZHtkfIQBWkmHAGYBZH1kfoQIWkpkf2SAhABaS2SBZIKEAFpMZINkhIQAWk1khWSGhABaTmSZZIdkiIQBWk9kmmSKZIuEAVpQhwAEAFpRUwApm3I3AAAAeilBYnN0cmFjdCBiYXNlIGxldmVsIHBhcnNlciBlbGVtZW50IGNsYXNzLnoEIAoJDUZjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB8AHQAXwFkAVMAKQJhxgEAAAogICAgICAgIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCB3aGl0ZXNwYWNlIGNoYXJzCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgIyBkZWZhdWx0IHdoaXRlc3BhY2UgY2hhcnMgYXJlIHNwYWNlLCA8VEFCPiBhbmQgbmV3bGluZQogICAgICAgICAgICBPbmVPck1vcmUoV29yZChhbHBoYXMpKS5wYXJzZVN0cmluZygiYWJjIGRlZlxuZ2hpIGprbCIpICAjIC0+IFsnYWJjJywgJ2RlZicsICdnaGknLCAnamtsJ10KCiAgICAgICAgICAgICMgY2hhbmdlIHRvIGp1c3QgdHJlYXQgbmV3bGluZSBhcyBzaWduaWZpY2FudAogICAgICAgICAgICBQYXJzZXJFbGVtZW50LnNldERlZmF1bHRXaGl0ZXNwYWNlQ2hhcnMoIiBcdCIpCiAgICAgICAgICAgIE9uZU9yTW9yZShXb3JkKGFscGhhcykpLnBhcnNlU3RyaW5nKCJhYmMgZGVmXG5naGkgamtsIikgICMgLT4gWydhYmMnLCAnZGVmJ10KICAgICAgICBOKQJyNwAAANoTREVGQVVMVF9XSElURV9DSEFSU6kB2gVjaGFyc3IRAAAAchEAAAByEgAAANoZc2V0RGVmYXVsdFdoaXRlc3BhY2VDaGFyc0QFAABzAgAAAAAOeidQYXJzZXJFbGVtZW50LnNldERlZmF1bHRXaGl0ZXNwYWNlQ2hhcnNjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB8AHQAXwFkAVMAKQJhaAIAAAogICAgICAgIFNldCBjbGFzcyB0byBiZSB1c2VkIGZvciBpbmNsdXNpb24gb2Ygc3RyaW5nIGxpdGVyYWxzIGludG8gYSBwYXJzZXIuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgIyBkZWZhdWx0IGxpdGVyYWwgY2xhc3MgdXNlZCBpcyBMaXRlcmFsCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICAgICBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQoKCiAgICAgICAgICAgICMgY2hhbmdlIHRvIFN1cHByZXNzCiAgICAgICAgICAgIFBhcnNlckVsZW1lbnQuaW5saW5lTGl0ZXJhbHNVc2luZyhTdXBwcmVzcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWycxOTk5JywgJzEyJywgJzMxJ10KICAgICAgICBOKQJyNwAAANoTX2xpdGVyYWxTdHJpbmdDbGFzc6kBcsIAAAByEQAAAHIRAAAAchIAAADaE2lubGluZUxpdGVyYWxzVXNpbmdUBQAAcwIAAAAAFHohUGFyc2VyRWxlbWVudC5pbmxpbmVMaXRlcmFsc1VzaW5nYwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHOGAAAAdACDAHwAXwFkAHwAXwJkAHwAXwNkAHwAXwR8AXwAXwVkAXwAXwZ0B3QIagmDAXwAXwpkAXwAXwtkAnwAXwxkAnwAXw10AIMAfABfDmQCfABfD2QCfABfEGQBfABfEWQDfABfEmQBfABfE2QEfABfFGQAfABfFWQBfABfFmQCfABfF2QAUwApBU5URnKrAAAAKQNOTk4pGHILAQAA2gtwYXJzZUFjdGlvbtoKZmFpbEFjdGlvbtoHc3RyUmVwctoLcmVzdWx0c05hbWXaCnNhdmVBc0xpc3TaDnNraXBXaGl0ZXNwYWNlcuQAAAByNwAAAHKmAQAA2gp3aGl0ZUNoYXJz2hVjb3B5RGVmYXVsdFdoaXRlQ2hhcnPaDm1heVJldHVybkVtcHR52ghrZWVwVGFic9oLaWdub3JlRXhwcnPaBWRlYnVn2gtzdHJlYW1saW5lZNoNbWF5SW5kZXhFcnJvctoGZXJybXNn2gxtb2RhbFJlc3VsdHPaDGRlYnVnQWN0aW9uc9oCcmXaDGNhbGxQcmVwYXJzZdoNY2FsbER1cmluZ1RyeSkCcr8AAADaCHNhdmVsaXN0chEAAAByEQAAAHISAAAAcsEAAABqBQAAcygAAAAAAQgBBgIGAQYBBgEGAQwBBgEGAQYBCAEGAQYBBgEGAQYBBgEGAQYBehZQYXJzZXJFbGVtZW50Ll9faW5pdF9fYwEAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHM8AAAAdACgAHwAoQF9AXwAagFkAWQBhQIZAHwBXwF8AGoCZAFkAYUCGQB8AV8CfABqA3I4dARqBXwBXwZ8AVMAKQJhLwMAAAogICAgICAgIE1ha2UgYSBjb3B5IG9mIHRoaXMgOmNsYXNzOmBQYXJzZXJFbGVtZW50YC4gIFVzZWZ1bCBmb3IgZGVmaW5pbmcKICAgICAgICBkaWZmZXJlbnQgcGFyc2UgYWN0aW9ucyBmb3IgdGhlIHNhbWUgcGFyc2luZyBwYXR0ZXJuLCB1c2luZyBjb3BpZXMgb2YKICAgICAgICB0aGUgb3JpZ2luYWwgcGFyc2UgZWxlbWVudC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogaW50KHRva3NbMF0pKQogICAgICAgICAgICBpbnRlZ2VySyA9IGludGVnZXIuY29weSgpLmFkZFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdICogMTAyNCkgKyBTdXBwcmVzcygiSyIpCiAgICAgICAgICAgIGludGVnZXJNID0gaW50ZWdlci5jb3B5KCkuYWRkUGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IHRva3NbMF0gKiAxMDI0ICogMTAyNCkgKyBTdXBwcmVzcygiTSIpCgogICAgICAgICAgICBwcmludChPbmVPck1vcmUoaW50ZWdlcksgfCBpbnRlZ2VyTSB8IGludGVnZXIpLnBhcnNlU3RyaW5nKCI1SyAxMDAgNjQwSyAyNTZNIikpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbNTEyMCwgMTAwLCA2NTUzNjAsIDI2ODQzNTQ1Nl0KCiAgICAgICAgRXF1aXZhbGVudCBmb3JtIG9mIGBgZXhwci5jb3B5KClgYCBpcyBqdXN0IGBgZXhwcigpYGA6OgoKICAgICAgICAgICAgaW50ZWdlck0gPSBpbnRlZ2VyKCkuYWRkUGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IHRva3NbMF0gKiAxMDI0ICogMTAyNCkgKyBTdXBwcmVzcygiTSIpCiAgICAgICAgTikHckkBAAByrQEAAHK3AQAAcrQBAAByNwAAAHKmAQAAcrMBAAApAnK/AAAAWgNjcHlyEQAAAHIRAAAAchIAAABySQEAAIEFAABzDAAAAAAWCgEQARABBgEIAXoSUGFyc2VyRWxlbWVudC5jb3B5YwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHMkAAAAfAF8AF8AZAF8AGoAFwB8AF8BdAJqA3IgfACgBKEAAQB8AFMAKQJhXwEAAAogICAgICAgIERlZmluZSBuYW1lIGZvciB0aGlzIGV4cHJlc3Npb24sIG1ha2VzIGRlYnVnZ2luZyBhbmQgZXhjZXB0aW9uIG1lc3NhZ2VzIGNsZWFyZXIuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgV29yZChudW1zKS5wYXJzZVN0cmluZygiQUJDIikgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBXOigwMTIzLi4uKSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAgICAgIFdvcmQobnVtcykuc2V0TmFtZSgiaW50ZWdlciIpLnBhcnNlU3RyaW5nKCJBQkMiKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIGludGVnZXIgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgIPoJRXhwZWN0ZWQgKQVyAwEAAHK7AQAAchcAAADaIWVuYWJsZV9kZWJ1Z19vbl9uYW1lZF9leHByZXNzaW9uc9oIc2V0RGVidWdyRwEAAHIRAAAAchEAAAByEgAAANoHc2V0TmFtZZ4FAABzCgAAAAAJBgEMAQYBCAF6FVBhcnNlckVsZW1lbnQuc2V0TmFtZWMDAAAAAAAAAAAAAAADAAAABAAAAEMAAABzDAAAAHwAoAB8AXwCoQJTACkBYU8DAAAKICAgICAgICBEZWZpbmUgbmFtZSBmb3IgcmVmZXJlbmNpbmcgbWF0Y2hpbmcgdG9rZW5zIGFzIGEgbmVzdGVkIGF0dHJpYnV0ZQogICAgICAgIG9mIHRoZSByZXR1cm5lZCBwYXJzZSByZXN1bHRzLgogICAgICAgIE5PVEU6IHRoaXMgcmV0dXJucyBhICpjb3B5KiBvZiB0aGUgb3JpZ2luYWwgOmNsYXNzOmBQYXJzZXJFbGVtZW50YCBvYmplY3Q7CiAgICAgICAgdGhpcyBpcyBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGRlZmluZSBhIGJhc2ljIGVsZW1lbnQsIHN1Y2ggYXMgYW4KICAgICAgICBpbnRlZ2VyLCBhbmQgcmVmZXJlbmNlIGl0IGluIG11bHRpcGxlIHBsYWNlcyB3aXRoIGRpZmZlcmVudCBuYW1lcy4KCiAgICAgICAgWW91IGNhbiBhbHNvIHNldCByZXN1bHRzIG5hbWVzIHVzaW5nIHRoZSBhYmJyZXZpYXRlZCBzeW50YXgsCiAgICAgICAgYGBleHByKCJuYW1lIilgYCBpbiBwbGFjZSBvZiBgYGV4cHIuc2V0UmVzdWx0c05hbWUoIm5hbWUiKWBgCiAgICAgICAgLSBzZWUgOmNsYXNzOmBfX2NhbGxfX2AuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgZGF0ZV9zdHIgPSAoaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgieWVhciIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJwogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQoKICAgICAgICAgICAgIyBlcXVpdmFsZW50IGZvcm06CiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAgKQHaD19zZXRSZXN1bHRzTmFtZakDcr8AAAByAwEAANoObGlzdEFsbE1hdGNoZXNyEQAAAHIRAAAAchIAAADaDnNldFJlc3VsdHNOYW1lrQUAAHMCAAAAABV6HFBhcnNlckVsZW1lbnQuc2V0UmVzdWx0c05hbWVjAwAAAAAAAAAAAAAABAAAAAMAAABDAAAAczQAAAB8AKAAoQB9A3wBoAFkAaEBciJ8AWQAZAKFAhkAfQFkA30CfAF8A18CfAIMAHwDXwN8A1MAKQRO2gEqcokAAABUKQRySQEAANoIZW5kc3dpdGhysAEAAHK8AQAAKQRyvwAAAHIDAQAAcsgBAABaB25ld3NlbGZyEQAAAHIRAAAAchIAAAByxgEAAMQFAABzDgAAAAABCAEKAQwBBAEGAQgBeh1QYXJzZXJFbGVtZW50Ll9zZXRSZXN1bHRzTmFtZVRjAgAAAAAAAAAAAAAAAwAAAAQAAAADAAAAc0AAAAB8AXImfABqAIkAZAWHAGYBZAJkA4QJfQKIAHwCXwF8AnwAXwBuFnQCfABqAGQEgwJyPHwAagBqAXwAXwB8AFMAKQZ6p01ldGhvZCB0byBpbnZva2UgdGhlIFB5dGhvbiBwZGIgZGVidWdnZXIgd2hlbiB0aGlzIGVsZW1lbnQgaXMKICAgICAgICAgICBhYm91dCB0byBiZSBwYXJzZWQuIFNldCBgYGJyZWFrRmxhZ2BgIHRvIFRydWUgdG8gZW5hYmxlLCBGYWxzZSB0bwogICAgICAgICAgIGRpc2FibGUuCiAgICAgICAgVGMEAAAAAAAAAAAAAAAFAAAABQAAABMAAABzHgAAAGQBZABsAH0EfASgAaEAAQCIAHwAfAF8AnwDgwRTAHL7AAAAKQLaA3BkYloJc2V0X3RyYWNlKQVyigEAAHK7AAAA2glkb0FjdGlvbnPaDGNhbGxQcmVQYXJzZXLMAQAAqQFaDF9wYXJzZU1ldGhvZHIRAAAAchIAAADaB2JyZWFrZXLUBQAAcwYAAAAAAQgCCAF6J1BhcnNlckVsZW1lbnQuc2V0QnJlYWsuPGxvY2Fscz4uYnJlYWtlctoUX29yaWdpbmFsUGFyc2VNZXRob2QpAlRUKQPaBl9wYXJzZXLRAQAAcjEBAAApA3K/AAAAWglicmVha0ZsYWdy0AEAAHIRAAAAcs8BAAByEgAAANoIc2V0QnJlYWvNBQAAcxAAAAAABQQBBgEOBQYBCAIMAQoBehZQYXJzZXJFbGVtZW50LnNldEJyZWFrYwEAAAAAAAAAAAAAAAMAAAAFAAAATwAAAHNWAAAAdAB8AYMBZAFnAWsCchZnAHwAXwFuPHQCZAJkA4QAfAFEAIMBgwFzMHQDZASDAYIBdAB0BHQFdAB8AYMBgwKDAXwAXwF8AqAGZAVkBqECfABfB3wAUwApB2GSBwAACiAgICAgICAgRGVmaW5lIG9uZSBvciBtb3JlIGFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIHN1Y2Nlc3NmdWxseSBtYXRjaGluZyBwYXJzZSBlbGVtZW50IGRlZmluaXRpb24uCiAgICAgICAgUGFyc2UgYWN0aW9uIGZuIGlzIGEgY2FsbGFibGUgbWV0aG9kIHdpdGggMC0zIGFyZ3VtZW50cywgY2FsbGVkIGFzIGBgZm4ocywgbG9jLCB0b2tzKWBgICwKICAgICAgICBgYGZuKGxvYywgdG9rcylgYCAsIGBgZm4odG9rcylgYCAsIG9yIGp1c3QgYGBmbigpYGAgLCB3aGVyZToKCiAgICAgICAgLSBzICAgPSB0aGUgb3JpZ2luYWwgc3RyaW5nIGJlaW5nIHBhcnNlZCAoc2VlIG5vdGUgYmVsb3cpCiAgICAgICAgLSBsb2MgPSB0aGUgbG9jYXRpb24gb2YgdGhlIG1hdGNoaW5nIHN1YnN0cmluZwogICAgICAgIC0gdG9rcyA9IGEgbGlzdCBvZiB0aGUgbWF0Y2hlZCB0b2tlbnMsIHBhY2thZ2VkIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIG9iamVjdAoKICAgICAgICBJZiB0aGUgZnVuY3Rpb25zIGluIGZucyBtb2RpZnkgdGhlIHRva2VucywgdGhleSBjYW4gcmV0dXJuIHRoZW0gYXMgdGhlIHJldHVybgogICAgICAgIHZhbHVlIGZyb20gZm4sIGFuZCB0aGUgbW9kaWZpZWQgbGlzdCBvZiB0b2tlbnMgd2lsbCByZXBsYWNlIHRoZSBvcmlnaW5hbC4KICAgICAgICBPdGhlcndpc2UsIGZuIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueSB2YWx1ZS4KCiAgICAgICAgSWYgTm9uZSBpcyBwYXNzZWQgYXMgdGhlIHBhcnNlIGFjdGlvbiwgYWxsIHByZXZpb3VzbHkgYWRkZWQgcGFyc2UgYWN0aW9ucyBmb3IgdGhpcwogICAgICAgIGV4cHJlc3Npb24gYXJlIGNsZWFyZWQuCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgogICAgICAgIC0gY2FsbER1cmluZ1RyeSA9IChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlIGlmIHBhcnNlIGFjdGlvbiBzaG91bGQgYmUgcnVuIGR1cmluZyBsb29rYWhlYWRzIGFuZCBhbHRlcm5hdGUgdGVzdGluZwoKICAgICAgICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSA6Y2xhc3M6YHBhcnNlU3RyaW5nIGZvciBtb3JlCiAgICAgICAgaW5mb3JtYXRpb24gb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgYGA8VEFCPmBgIHMsIGFuZCBzdWdnZXN0ZWQKICAgICAgICBtZXRob2RzIHRvIG1haW50YWluIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UKICAgICAgICBsb2NhdGlvbiwgYW5kIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlciArICcvJyArIGludGVnZXIgKyAnLycgKyBpbnRlZ2VyCgogICAgICAgICAgICBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQoKICAgICAgICAgICAgIyB1c2UgcGFyc2UgYWN0aW9uIHRvIGNvbnZlcnQgdG8gaW50cyBhdCBwYXJzZSB0aW1lCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiBpbnQodG9rc1swXSkpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlciArICcvJyArIGludGVnZXIgKyAnLycgKyBpbnRlZ2VyCgogICAgICAgICAgICAjIG5vdGUgdGhhdCBpbnRlZ2VyIGZpZWxkcyBhcmUgbm93IGludHMsIG5vdCBzdHJpbmdzCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWzE5OTksICcvJywgMTIsICcvJywgMzFdCiAgICAgICAgTmMBAAAAAAAAAAAAAAACAAAAAwAAAHMAAABzFgAAAHwAXQ59AXQAfAGDAVYAAQBxAmQAUwBynAAAACkB2ghjYWxsYWJsZSkCcp0AAABytAAAAHIRAAAAchEAAAByEgAAAHKfAAAACwYAAHMEAAAABAACAHovUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbi48bG9jYWxzPi48Z2VuZXhwcj56HnBhcnNlIGFjdGlvbnMgbXVzdCBiZSBjYWxsYWJsZXLAAQAARikIcgsBAAByrQEAANoDYWxschIBAADaA21hcHK3AAAAcucAAABywAEAAKkDcr8AAADaA2Zuc3I9AQAAchEAAAByEQAAAHISAAAAcpcAAADgBQAAcw4AAAAAKA4BCAISAQgBFAEOAXocUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbmMBAAAAAAAAAAAAAAADAAAABwAAAE8AAABzNAAAAHwABABqAHQBdAJ0A3QBfAGDAYMCgwE3AAIAXwB8AGoEcCx8AqAFZAFkAqECfABfBHwAUwApA3qbCiAgICAgICAgQWRkIG9uZSBvciBtb3JlIHBhcnNlIGFjdGlvbnMgdG8gZXhwcmVzc2lvbidzIGxpc3Qgb2YgcGFyc2UgYWN0aW9ucy4gU2VlIDpjbGFzczpgc2V0UGFyc2VBY3Rpb25gLgoKICAgICAgICBTZWUgZXhhbXBsZXMgaW4gOmNsYXNzOmBjb3B5YC4KICAgICAgICBywAEAAEYpBnKtAQAAcgsBAABy1gEAAHK3AAAAcsABAABy5wAAAHLXAQAAchEAAAByEQAAAHISAAAA2g5hZGRQYXJzZUFjdGlvbhEGAABzBgAAAAAGHAEUAXocUGFyc2VyRWxlbWVudC5hZGRQYXJzZUFjdGlvbmMBAAAAAAAAAAAAAAAEAAAACgAAAE8AAABzRgAAAHwBRABdKH0DfABqAKABdAJ8A3wCoANkAaEBfAKgA2QCZAOhAmQEjQOhAQEAcQR8AGoEcD58AqADZAVkA6ECfABfBHwAUwApBmG8AwAAQWRkIGEgYm9vbGVhbiBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gZXhwcmVzc2lvbidzIGxpc3Qgb2YgcGFyc2UgYWN0aW9ucy4gU2VlCiAgICAgICAgOmNsYXNzOmBzZXRQYXJzZUFjdGlvbmAgZm9yIGZ1bmN0aW9uIGNhbGwgc2lnbmF0dXJlcy4gVW5saWtlIGBgc2V0UGFyc2VBY3Rpb25gYCwKICAgICAgICBmdW5jdGlvbnMgcGFzc2VkIHRvIGBgYWRkQ29uZGl0aW9uYGAgbmVlZCB0byByZXR1cm4gYm9vbGVhbiBzdWNjZXNzL2ZhaWwgb2YgdGhlIGNvbmRpdGlvbi4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgLSBtZXNzYWdlID0gZGVmaW5lIGEgY3VzdG9tIG1lc3NhZ2UgdG8gYmUgdXNlZCBpbiB0aGUgcmFpc2VkIGV4Y2VwdGlvbgogICAgICAgIC0gZmF0YWwgICA9IGlmIFRydWUsIHdpbGwgcmFpc2UgUGFyc2VGYXRhbEV4Y2VwdGlvbiB0byBzdG9wIHBhcnNpbmcgaW1tZWRpYXRlbHk7IG90aGVyd2lzZSB3aWxsIHJhaXNlIFBhcnNlRXhjZXB0aW9uCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgeWVhcl9pbnQgPSBpbnRlZ2VyLmNvcHkoKQogICAgICAgICAgICB5ZWFyX2ludC5hZGRDb25kaXRpb24obGFtYmRhIHRva3M6IHRva3NbMF0gPj0gMjAwMCwgbWVzc2FnZT0iT25seSBzdXBwb3J0IHllYXJzIDIwMDAgYW5kIGxhdGVyIikKICAgICAgICAgICAgZGF0ZV9zdHIgPSB5ZWFyX2ludCArICcvJyArIGludGVnZXIgKyAnLycgKyBp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cjh8AGoCfAUZAHwBfAJ8AIMDAQB6inwEclJ8AGoDclJ8AKAEfAF8AqECfQluBHwCfQl8CX0KfABqBXNsfAl0BnwBgwFrBXKuehZ8AKAHfAF8CXwDoQNcAn0CfQtXAHHABAB0CGsKcqoBAAEAAQB0CXwBdAZ8AYMBfABqCnwAgwSCAVkAccBYAG4SfACgB3wBfAl8A6EDXAJ9An0LVwBuXAQAdAtrCpABch4BAH0MAQB6PHwAagJ8BxkAcvR8AGoCfAcZAHwBfAp8AHwMgwQBAHwAagGQAXIMfACgAXwBfAp8AHwMoQQBAIIAVwA1AGQAfQx+DFgAWQBuAlgAbpB8BJABcj58AGoDkAFyPnwAoAR8AXwCoQJ9CW4EfAJ9CXwJfQp8AGoFkAFzXHwJdAZ8AYMBawWQAXKgehZ8AKAHfAF8CXwDoQNcAn0CfQtXAG4qBAB0CGsKkAFynAEAAQABAHQJfAF0BnwBgwF8AGoKfACDBIIBWQBuAlgAbhJ8AKAHfAF8CXwDoQNcAn0CfQt8AKAMfAF8AnwLoQN9C3QNfAt8AGoOfABqD3wAahBkAo0EfQ18AGoRkANyYHwDkAFz7HwAahKQA3JgfAiQAnLQepR8AGoRRABdiH0OehB8DnwBfAp8DYMDfQtXAG42BAB0CGsKkAJyRAEAfQ8BAHoWdAlkA4MBfRB8D3wQXxN8EIIBVwA1AGQAfQ9+D1gAWQBuAlgAfAtkAGsJkAFy+nwLfA1rCZABcvp0DXwLfABqDnwAag+QAm92dBR8C3QNdBVmAoMCfABqEGQCjQR9DZABcfpXAG5GBAB0C2sKkAJyzAEAfQwBAHomfABqAnwHGQCQAnK6fABqAnwHGQB8AXwKfAB8DIMEAQCCAFcANQBkAH0MfgxYAFkAbgJYAG6QfABqEUQAXYh9DnoQfA58AXwKfA2DA30LVwBuNgQAdAhrCpADciABAH0PAQB6FnQJZAODAX0QfA98EF8TfBCCAVcANQBkAH0Pfg9YAFkAbgJYAHwLZABrCZACctZ8C3wNawmQAnLWdA18C3wAag58AGoPkANvUnQUfAt0DXQVZgKDAnwAahBkAo0EfQ2QAnHWfAiQA3KIfABqAnwGGQCQA3KIfABqAnwGGQB8AXwKfAJ8AHwNgwUBAHwCfA1mAlMAKQROKQNyAQAAAHKgAAAAcogAAAApAnIE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bmUgaXMgcGFzc2VkLCB0aGVuCiAgICAgICAgICAgICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICAgICBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KCiAgICAgICAgICAgVGhpcyBzcGVlZHVwIG1heSBicmVhayBleGlzdGluZyBwcm9ncmFtcyB0aGF0IHVzZSBwYXJzZSBhY3Rpb25zIHRoYXQKICAgICAgICAgICBoYXZlIHNpZGUtZWZmZWN0cy4gIEZvciB0aGlzIHJlYXNvbiwgcGFja3JhdCBwYXJzaW5nIGlzIGRpc2FibGVkIHdoZW4KICAgICAgICAgICB5b3UgZmlyc3QgaW1wb3J0IHB5cGFyc2luZy4gIFRvIGFjdGl2YXRlIHRoZSBwYWNrcmF0IGZlYXR1cmUsIHlvdXIKICAgICAgICAgICBwcm9ncmFtIG11c3QgY2FsbCB0aGUgY2xhc3MgbWV0aG9kIDpjbGFzczpgUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YC4KICAgICAgICAgICBGb3IgYmVzdCByZXN1bHRzLCBjYWxsIGBgZW5hYmxlUGFja3JhdCgpYGAgaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICAgICAgICBpbXBvcnRpbmcgcHlwYXJzaW5nLgoKICAgICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICAgIGZyb20gcGlwLl92ZW5kb3IgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHcjcAAADaD19wYWNrcmF0RW5hYmxlZHL8AQAAcg0CAAByBwIAAHIQAgAActIBAAApAVoQY2FjaGVfc2l6ZV9saW1pdHIRAAAAchEAAAByEgAAANoNZW5hYmxlUGFja3JhdDwHAABzDAAAAAAbBgEGAQgBDAIMAXobUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YwMAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHOuAAAAdACgAaEAAQB8AGoCcxZ8AKADoQABAHwAagREAF0MfQN8A6ADoQABAHEcfABqBXM4fAGgBqEAfQF6PHwAoAd8AWQBoQJcAn0EfQV8AnJyfACgCHwBfAShAn0EdAmDAHQKgwAXAH0GfAagB3wBfAShAgEAVwBuMAQAdAtrCnKkAQB9BwEAehJ0AGoMcpCCAG4EfAeCAVcANQBkAn0HfgdYAFkAbgZYAHwFUwBkAlMAKQNh+wUAAAogICAgICAgIEV4ZWN1dGUgdGhlIHBhcnNlIGV4cHJlc3Npb24gd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nLgogICAgICAgIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIHRvIHRoZSBjbGllbnQgY29kZSwgb25jZSB0aGUgY29tcGxldGUKICAgICAgICBleHByZXNzaW9uIGhhcyBiZWVuIGJ1aWx0LgoKICAgICAgICBSZXR1cm5zIHRoZSBwYXJzZWQgZGF0YSBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QsIHdoaWNoIG1heSBiZQogICAgICAgIGFjY2Vzc2VkIGFzIGEgbGlzdCwgb3IgYXMgYSBkaWN0IG9yIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgaWYgdGhlIGdpdmVuIHBhcnNlcgogICAgICAgIGluY2x1ZGVzIHJlc3VsdHMgbmFtZXMuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IGBgcGFyc2VBbGxgYCB0byBUcnVlIChlcXVpdmFsZW50IHRvIGVuZGluZwogICAgICAgIHRoZSBncmFtbWFyIHdpdGggYGBTdHJpbmdFbmQoKWBgKS4KCiAgICAgICAgTm90ZTogYGBwYXJzZVN0cmluZ2BgIGltcGxpY2l0bHkgY2FsbHMgYGBleHBhbmR0YWJzKClgYCBvbiB0aGUgaW5wdXQgc3RyaW5nLAogICAgICAgIGluIG9yZGVyIHRvIHJlcG9ydCBwcm9wZXIgY29sdW1uIG51bWJlcnMgaW4gcGFyc2UgYWN0aW9ucy4KICAgICAgICBJZiB0aGUgaW5wdXQgc3RyaW5nIGNvbnRhaW5zIHRhYnMgYW5kCiAgICAgICAgdGhlIGdyYW1tYXIgdXNlcyBwYXJzZSBhY3Rpb25zIHRoYXQgdXNlIHRoZSBgYGxvY2BgIGFyZ3VtZW50IHRvIGluZGV4IGludG8gdGhlCiAgICAgICAgc3RyaW5nIGJlaW5nIHBhcnNlZCwgeW91IGNhbiBlbnN1cmUgeW91IGhhdmUgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGlucHV0CiAgICAgICAgc3RyaW5nIGJ5OgoKICAgICAgICAtIGNhbGxpbmcgYGBwYXJzZVdpdGhUYWJzYGAgb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIGBgcGFyc2VTdHJpbmdgYAogICAgICAgICAgKHNlZSA6Y2xhc3M6YHBhcnNlV2l0aFRhYnNgKQogICAgICAgIC0gZGVmaW5lIHlvdXIgcGFyc2UgYWN0aW9uIHVzaW5nIHRoZSBmdWxsIGBgKHMsIGxvYywgdG9rcylgYCBzaWduYXR1cmUsIGFuZAogICAgICAgICAgcmVmZXJlbmNlIHRoZSBpbnB1dCBzdHJpbmcgdXNpbmcgdGhlIHBhcnNlIGFjdGlvbidzIGBgc2BgIGFyZ3VtZW50CiAgICAgICAgLSBleHBsaWN0bHkgZXhwYW5kIHRoZSB0YWJzIGluIHlvdXIgaW5wdXQgc3RyaW5nIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgICBgYHBhcnNlU3RyaW5nYGAKCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScpICAjIC0+IFsnYWFhYWEnXQogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScsIHBhcnNlQWxsPVRydWUpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgZW5kIG9mIHRleHQKICAgICAgICByAQAAAE4pDXI3AAAAchECAAByuQEAANoKc3RyZWFtbGluZXK3AQAAcrYBAADaCmV4cGFuZHRhYnNy0gEAAHLiAQAAch8AAAByPAAAAHIwAAAA2hJ2ZXJib3NlX3N0YWNrdHJhY2UpCHK/AAAAcooBAADaCHBhcnNlQWxsct4BAAByuwAAAHLpAQAAWgJzZXLrAAAAchEAAAByEQAAAHISAAAA2gtwYXJzZVN0cmluZ18HAABzJAAAAAAhCAEGAQgCCgEKAQYBCAECARABBAEMAQwBEAEQAQYBBAMWAnoZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAAAAAAAPAAAACgAAAGMAAABzNgEAAHwAagBzDnwAoAGhAAEAfABqAkQAXQx9BHwEoAGhAAEAcRR8AGoDczR0BHwBgwGgBaEAfQF0BnwBgwF9BWQBfQZ8AGoHfQd8AGoIfQh0CaAKoQABAGQBfQl6pHwGfAVrAXL6fAl8AmsAcvp6IHwHfAF8BoMCfQp8CHwBfApkAmQDjQNcAn0LfQxXAG4cBAB0C2sKcqYBAAEAAQB8CmQEFwB9BlkAcVpYAHwLfAZrBHLwfAlkBDcAfQl8DHwKfAtmA1YAAQB8A3LqfAd8AXwGgwJ9DXwNfAZrBHLgfAt9BnHufAZkBDcAfQZx+HwLfQZxWnwKZAQXAH0GcVpXAG40BAB0DGsKkAFyMAEAfQ4BAHoUdAlqDZABchyCAG4EfA6CAVcANQBkBX0Ofg5YAFkAbgJYAGQFUwApBmFxBAAACiAgICAgICAgU2NhbiB0aGUgaW5wdXQgc3RyaW5nIGZvciBleHByZXNzaW9uIG1hdGNoZXMuICBFYWNoIG1hdGNoIHdpbGwgcmV0dXJuIHRoZQogICAgICAgIG1hdGNoaW5nIHRva2Vucywgc3RhcnQgbG9jYXRpb24sIGFuZCBlbmQgbG9jYXRpb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBgYG1heE1hdGNoZXNgYCBhcmd1bWVudCwgdG8gY2xpcCBzY2FubmluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuICBJZgogICAgICAgIGBgb3ZlcmxhcGBgIGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgOmNsYXNzOmBwYXJzZVN0cmluZ2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFyc2luZwogICAgICAgIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB0YWJzLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHNvdXJjZSA9ICJzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODciCiAgICAgICAgICAgIHByaW50KHNvdXJjZSkKICAgICAgICAgICAgZm9yIHRva2Vucywgc3RhcnQsIGVuZCBpbiBXb3JkKGFscGhhcykuc2NhblN0cmluZyhzb3VyY2UpOgogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgJ14nKihlbmQtc3RhcnQpKQogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgdG9rZW5zWzBdKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGqQFyzgEAAHKgAAAATikOcrkBAAByFQIAAHK3AQAAcrYBAABymwAAAHIWAgAAcskAAABy4gEAAHLSAQAAcjcAAAByEQIAAHIyAAAAcjAAAAByFwIAACkPcr8AAAByigEAANoKbWF4TWF0Y2hlc1oHb3ZlcmxhcHLeAQAAcuEBAAByuwAAAFoKcHJlcGFyc2VGbloHcGFyc2VGbtoHbWF0Y2hlc3LoAQAAWgdu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dGVuc2lvbiB0byA6Y2xhc3M6YHNjYW5TdHJpbmdgLCBzaW1wbGlmeWluZyB0aGUgYWNjZXNzIHRvIHRoZSB0b2tlbnMgZm91bmQKICAgICAgICB0byBtYXRjaCB0aGUgZ2l2ZW4gcGFyc2UgZXhwcmVzc2lvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIGBgbWF4TWF0Y2hlc2BgIGFyZ3VtZW50LCB0byBjbGlwIHNlYXJjaGluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgIyBhIGNhcGl0YWxpemVkIHdvcmQgc3RhcnRzIHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciwgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlIGxvd2VyY2FzZSBsZXR0ZXJzCiAgICAgICAgICAgIGNhcF93b3JkID0gV29yZChhbHBoYXMudXBwZXIoKSwgYWxwaGFzLmxvd2VyKCkpCgogICAgICAgICAgICBwcmludChjYXBfd29yZC5zZWFyY2hTdHJpbmcoIk1vcmUgdGhhbiBJcm9uLCBtb3JlIHRoYW4gTGVhZCwgbW9yZSB0aGFuIEdvbGQgSSBuZWVkIEVsZWN0cmljaXR5IikpCgogICAgICAgICAgICAjIHRoZSBzdW0oKSBidWlsdGluIGNhbiBiZSB1c2VkIHRvIG1lcmdlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBQYXJzZVJlc3VsdHMgb2JqZWN0CiAgICAgICAgICAgIHByaW50KHN1bShjYXBfd29yZC5zZWFyY2hTdHJpbmcoIk1vcmUgdGhhbiBJcm9uLCBtb3JlIHRoYW4gTGVhZCwgbW9yZSB0aGFuIEdvbGQgSSBuZWVkIEVsZWN0cmljaXR5IikpKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgW1snTW9yZSddLCBbJ0lyb24nXSwgWydMZWFkJ10sIFsnR29sZCddLCBbJ0knXSwgWydFbGVjdHJpY2l0eSddXQogICAgICAgICAgICBbJ01vcmUnLCAnSXJvbicsICdMZWFkJywgJ0dvbGQnLCAnSScsICdFbGVjdHJpY2l0eSdd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AIMBgwF9AXwBZAoXAGQCZAaFAhkAfQF8AWQHGQBkAmsIcqJkB3wBZAMZAGYCfQF0AXwBZAcZAHQDgwJy+nwBZAMZAGQCawhy+nwBZAcZAGQHawJy0HQEiAGDAVMAfAFkBxkAZANrAnLkdAWIAYMBUwCIAXwBZAcZABQAdASIAYMBFwBTAG5OdAF8AWQHGQB0A4MCkAFyLHQBfAFkAxkAdAODApABcix8AVwCfQJ9A3wDfAI4AH0Dbhx0BmQLdAd8AWQHGQCDAXQHfAFkAxkAgwGDA4IBbg50BmQMdAd8AYMBgwKCAXwCZAdrAJABcmp0CGQNgwGCAXwDZAdrAJABcnx0CGQOgwGCAXwCfAMEAAMAawKQAXKUZAdrApABcqBuBAEAbgh0CGQPgwGCAXwDkAFy9IcAhwFmAmQQZBGECIkAfAKQAXLqfAJkA2sCkAFy0ogBiAB8A4MBFwB9BG4WdAmIAWcBfAIUAIMBiAB8A4MBFwB9BG4IiAB8A4MBfQRuHnwCZANrApACcgSIAX0Ebg50CYgBZwF8AhQAgwF9BHwEUwApEmH4AwAACiAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgKiBvcGVyYXRvciwgYWxsb3dzIHVzZSBvZiBgYGV4cHIgKiAzYGAgaW4gcGxhY2Ugb2YKICAgICAgICBgYGV4cHIgKyBleHByICsgZXhwcmBgLiAgRXhwcmVzc2lvbnMgbWF5IGFsc28gbWUgbXVsdGlwbGllZCBieSBhIDItaW50ZWdlcgogICAgICAgIHR1cGxlLCBzaW1pbGFyIHRvIGBge21pbiwgbWF4fWBgIG11bHRpcGxpZXJzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBUdXBsZXMKICAgICAgICBtYXkgYWxzbyBpbmNsdWRlIGBgTm9uZWBgIGFzIGluOgogICAgICAgICAtIGBgZXhwcioobiwgTm9uZSlgYCBvciBgYGV4cHIqKG4sIClgYCBpcyBlcXVpdmFsZW50CiAgICAgICAgICAgICAgdG8gYGBleHByKm4gKyBaZXJvT3JNb3JlKGV4cHIpYGAKICAgICAgICAgICAgICAocmVhZCBhcyAiYXQgbGVhc3QgbiBpbnN0YW5jZXMgb2YgYGBleHByYGAiKQogICAgICAgICAtIGBgZXhwcioo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IHdoaWxlIGRvaW5nIHBhdHRlcm4gbWF0Y2hpbmcuCiAgICAgICAgU2V0IGBgZmxhZ2BgIHRvIFRydWUgdG8gZW5hYmxlLCBGYWxzZSB0byBkaXNhYmxlLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHdkID0gV29yZChhbHBoYXMpLnNldE5hbWUoImFscGhhd29yZCIpCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldE5hbWUoIm51bXdvcmQiKQogICAgICAgICAgICB0ZXJtID0gd2QgfCBpbnRlZ2VyCgogICAgICAgICAgICAjIHR1cm4gb24gZGVidWdnaW5nIGZvciB3ZAogICAgICAgICAgICB3ZC5zZXREZWJ1ZygpCgogICAgICAgICAgICBPbmVPck1vcmUodGVybSkucGFyc2VTdHJpbmcoImFiYyAxMjMgeHl6IDg5MCIpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDAoMSwxKQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ2FiYyddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMygxLDQpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDQpLCAobGluZToxLCBjb2w6NSkKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyA3KDEsOCkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWyd4eXonXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDExKDEsMTIpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDEyKSwgKGxpbmU6MSwgY29sOjEzKQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDE1KDEsMTYpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDE1KSwgKGxpbmU6MSwgY29sOjE2KQoKICAgICAgICBUaGUgb3V0cHV0IHNob3duIGlzIHRoYXQgcHJvZHVjZWQgYnkgdGhlIGRlZmF1bHQgZGVidWcgYWN0aW9ucyAtIGN1c3RvbSBkZWJ1ZyBhY3Rpb25zIGNhbiBiZQogICAgICAgIHNwZWNpZmllZCB1c2luZyA6Y2xhc3M6YHNldERlYnVnQWN0aW9uc2AuIFByaW9yIHRvIGF0dGVtcHRpbmcKICAgICAgICB0byBtYXRjaCB0aGUgYGB3ZGBgIGV4cHJlc3Npb24sIHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZSBgYCJNYXRjaCA8ZXhwcm5hbWU+IGF0IGxvYyA8bj4oPGxpbmU+LDxjb2w+KSJgYAogICAgICAgIGlzIHNob3duLiBUaGVuIGlmIHRoZSBwYXJzZSBzdWNjZWVkcywgYSBgYCJNYXRjaGVkImBgIG1lc3NhZ2UgaXMgc2hvd24sIG9yIGFuIGBgIkV4Y2VwdGlvbiByYWlzZWQiYGAKICAgICAgICBtZXNzYWdlIGlzIHNob3duLiBBbHNvIG5vdGUgdGhlIHVzZSBvZiA6Y2xhc3M6YHNldE5hbWVgIHRvIGFzc2lnbiBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgdG8gdGhlIGV4cHJlc3Npb24sCiAgICAgICAgd2hpY2ggbWFrZXMgZGVidWdnaW5nIGFuZCBleGNlcHRpb24gbWVzc2FnZXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgLSBmb3IgaW5zdGFuY2UsIHRoZSBkZWZhdWx0CiAgICAgICAgbmFtZSBjcmVhdGVkIGZvciB0aGUgOmNsYXNzOmBXb3JkYCBleHByZXNzaW9uIHdpdGhvdXQgY2FsbGluZyBgYHNldE5hbWVgYCBpcyBgYCJXOihBQkNELi4uKSJgYC4KICAgICAgICBGKQVyRwIAAHKMAQAAco8BAABykAEAAHK4AQAAKQJyvwAAANoEZmxhZ3IRAAAAchEAAAByEgAAAHLEAQAAsAkAAHMIAAAAACUEARACBgF6FlBhcnNlckVsZW1lbnQuc2V0RGVidWdjAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcwYAAAB8AGoAUwBynAAAAHKCAQAAcswAAAByEQAAAHIRAAAAchIAAAByygAAANsJAABzAgAAAAABehVQYXJzZXJFbGVtZW50Ll9fc3RyX19jAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwgAAAB0AHwAgwFTAHKcAAAAcssAAAByzAAAAHIRAAAAchEAAAByEgAAAHLNAAAA3gkAAHMCAAAAAAF6FlBhcnNlckVsZW1lbnQuX19yZXByX19jAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcxAAAABkAXwAXwBkAHwAXwF8AFMAcv4AAAApAnK5AQAAcq8BAAByzAAAAHIRAAAAchEAAAByEgAAAHIVAgAA4QkAAHMGAAAAAAEGAQYBehhQYXJzZXJFbGVtZW50LnN0cmVhbWxpbmVjAgAAAAAAAAAAAAAAAgAAAAEAAABDAAAAcwQAAABkAFMAcpwAAAByEQAAAHL0AAAAchEAAAByEQAAAHISAAAA2g5jaGVja1JlY3Vyc2lvbuYJAABzAgAAAAABehxQYXJzZXJFbGVtZW50LmNoZWNrUmVjdXJzaW9uYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMOAAAAfACgAGcAoQEBAGQBUwApAnpqCiAgICAgICAgQ2hlY2sgZGVmaW5lZCBleHByZXNzaW9ucyBmb3IgdmFsaWQgc3RydWN0dXJlLCBjaGVjayBmb3IgaW5maW5pdGUgcmVjdXJzaXZlIGRlZmluaXRpb25zLgogICAgICAgIE4pAXJJAgAAKQJyvwAAANoNdmFsaWRhdGVUcmFjZXIRAAAAchEAAAByEgAAANoIdmFsaWRhdGXpCQAAcwIAAAAABHoWUGFyc2VyRWxlbWVudC52YWxpZGF0ZWMDAAAAAAAAAAAAAAAGAAAADAAAAEMAAABzhAAAAHoMfAGgAKEAfQNXAG4yBAB0AWsKcj4BAAEAAQB0AnwBZAGDAo8OfQR8BKAAoQB9A1cANQBRAFIAWABZAG4CWAB6DnwAoAN8A3wCoQJXAFMABAB0BGsKcn4BAH0FAQB6EnQFagZyaoIAbgR8BYIBVwA1AGQCfQV+BVgAWQBuAlgAZAJTACkDetAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIG9uIHRoZSBnaXZlbiBmaWxlIG9yIGZpbGVuYW1lLgogICAgICAgIElmIGEgZmlsZW5hbWUgaXMgc3BlY2lmaWVkIChpbnN0ZWFkIG9mIGEgZmlsZSBvYmplY3QpLAogICAgICAgIHRoZSBlbnRpcmUgZmlsZSBpcyBvcGVuZWQsIHJlYWQsIGFuZCBjbG9zZWQgYmVmb3JlIHBhcnNpbmcuCiAgICAgICAg2gFyTikH2gRyZWFkcsYAAADaBG9wZW5yGQIAAHIwAAAAcjcAAAByFwIAACkGcr8AAABaEGZpbGVfb3JfZmlsZW5hbWVyGAIAAFoNZmlsZV9jb250ZW50c9oBZnLrAAAAchEAAAByEQAAAHISAAAA2glwYXJzZUZpbGXvCQAAcxYAAAAABgIBDAEOAQwBGAECAQ4BEAEGAQQDehdQYXJzZXJFbGVtZW50LnBhcnNlRmlsZWMCAAAAAAAAAAAAAAACAAAAAwAAAAMAAABzaAAAAHQAfAF0AYMCckJ0AnIofAB8AWsIcCR0A3QBfACDAqAEfAGhAQEAcWR8AHwBawhwPnQFfACDAXQFfAGDAWsCUwBuInQAfAF0BoMCclZ8AKAHfAGhAVMAdAN0AXwAgwJ8AWsCUwBkAFMAcpwAAAApCHKQAAAAcjcAAAByYgEAANoFc3VwZXLaBl9fZXFfX9oEdmFyc3IQAQAAchwCAAByUwEAAKkBcqIBAAByEQAAAHISAAAAclICAAADCgAAcw4AAAAAAQoBBAEaAhoBCgEKAnoUUGFyc2VyRWxlbWVudC5fX2VxX19jAgAAAAAAAAAAAAAAAgAAAAIAAABDAAAAcwoAAAB8AHwBawIMAFMAcpwAAAByEQAAAHJTAQAAchEAAAByEQAAAHISAAAA2gZfX25lX18OCgAAcwIAAAAAAXoUUGFyc2VyRWxlbWVudC5fX25lX19jAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwgAAAB0AHwAgwFTAHKcAAAAKQHaAmlkcswAAAByEQAAAHIRAAAAchIAAADaCF9faGFzaF9fEQoAAHMCAAAAAAF6FlBhcnNlckVsZW1lbnQuX19oYXNoX19jAgAAAAAAAAAAAAAAAgAAAAIAAABDAAAAcwgAAAB8AHwBawJTAHKcAAAAchEAAAByUwEAAHIRAAAAchEAAAByEgAAANoHX19yZXFfXxQKAABzAgAAAAABehVQYXJzZXJFbGVtZW50Ll9fcmVxX19jAgAAAAAAAAAAAAAAAgAAAAIAAABDAAAAcwoAAAB8AHwBawIMAFMAcpwAAAByEQAAAHJTAQAAchEAAAByEQAAAHISAAAA2gdfX3JuZV9fFwoAAHMCAAAAAAF6FVBhcnNlckVsZW1lbnQuX19ybmVfX2MDAAAAAAAAAAAAAAADAAAACAAAAEMAAABzNAAAAHoYfABqAHQBfAGDAXwCZAGNAgEAVwBkAlMABAB0AmsKci4BAAEAAQBZAGQDUwBYAGQEUwApBWHBAQAACiAgICAgICAgTWV0aG9kIGZvciBxdWljayB0ZXN0aW5nIG9mIGEgcGFyc2VyIGFnYWluc3QgYSB0ZXN0IHN0cmluZy4gR29vZCBmb3Igc2ltcGxlCiAgICAgICAgaW5saW5lIG1pY3JvdGVzdHMgb2Ygc3ViIGV4cHJlc3Npb25zIHdoaWxlIGJ1aWxkaW5nIHVwIGxhcmdlciBwYXJzZXIuCgogICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgIC0gdGVzdFN0cmluZyAtIHRvIHRlc3QgYWdhaW5zdCB0aGlzIGV4cHJlc3Npb24gZm9yIGEgbWF0Y2gKICAgICAgICAgLSBwYXJzZUFsbCAtIChkZWZhdWx0PSBgYFRydWVgYCkgLSBmbGFnIHRvIHBhc3MgdG8gOmNsYXNzOmBwYXJzZVN0cmluZ2Agd2hlbiBydW5uaW5nIHRlc3RzCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgZXhwciA9IFdvcmQobnVtcykKICAgICAgICAgICAgYXNzZXJ0IGV4cHIubWF0Y2hlcygiMTAwIikKICAgICAgICCpAXIYAgAAVEZOKQNyGQIAAHKbAAAAcjAAAAApA3K/AAAAWgp0ZXN0U3RyaW5nchgCAAByEQAAAHIRAAAAchIAAAByHAIAABoKAABzCgAAAAAOAgESAQYBDgF6FVBhcnNlckVsZW1lbnQubWF0Y2hlc/oBI2MJAAAAAAAAAAAAAAAXAAAACwAAAEMAAABz3AIAAHQAfAF0AYMCciJ0AnQDdARqBXwBoAahAKAHoQCDAoMBfQF0AHwDdAGDAnI0dAh8A4MBfQN8CGQBawhyQnQJagp9CHwIagt9CWcAfQpnAH0LZAJ9DHQIZAODAaAMdA1kBIMBoQGgDnQPoQF9DWQFfQ58AUQAkAJdXH0PfANkAWsJco58A6AQfA9kBqECc5Z8C3KifA9zonwLoBF8D6EBAQBxdHwPc6hxdGQEoBJ8C6EBfA9nAn0QZwB9C3oifA2gE3wPoBR8DqEBoQF9D3wAahV8D3wCZAeNAn0RVwBu8gQAdBZrCpABcowBAH0SAQB6jnQAfBJ0F4MCcv5kCG4CZAl9E2QEfA9rBpABckJ8EKARdBh8EmoZfA+DAqEBAQB8EKARZAp0GnwSahl8D4MCZAsYABQAZAwXAHwTFwChAQEAbhh8EKARZAp8EmoZFABkDBcAfBMXAKEBAQB8EKARZA10BHwSgwEXAKEBAQB8DJABb3R8Bn0MfBJ9EVcANQBkAX0SfhJYAFkAkAFuFAQAdBtrCpABcs4BAH0UAQB6JHwQoBFkDnQEfBSDARcAoQEBAHwMkAFvuHwGfQx8FH0RVwA1AGQBfRR+FFgAWQBu0lgAfAyQAW/afAYMAH0MfAdkAWsJkAJyjnpSfAd8D3wRgwJ9FXwVZAFrCZACcih0AHwVdByDApACchh8EKARfBWgHaEAoQEBAG4OfBCgEXQEfBWDAaEBAQBuDnwQoBF8EaAdoQChAQEAVwBuUgQAdBtrCpACcooBAH0WAQB6MnwQoBF8EWodfARkD40BoQEBAHwQoBFkEKAefAdqH3QgfBaDAWoffBahA6EBAQBXADUAZAF9Fn4WWABZAG4CWABuEnwQoBF8EWodfARkD40BoQEBAHwFkAJyxHwEkAJytnwQoBFkCaEBAQB8CWQEoBJ8EKEBgwEBAHwKoBF8D3wRZgKhAQEAcXR8DHwKZgJTACkRYXMNAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIG9uIGEgc2VyaWVzIG9mIHRlc3Qgc3RyaW5ncywgc2hvd2luZyBlYWNoCiAgICAgICAgdGVzdCwgdGhlIHBhcnNlZCByZXN1bHRzIG9yIHdoZXJlIHRoZSBwYXJzZSBmYWlsZWQuIFF1aWNrIGFuZCBlYXN5IHdheSB0bwogICAgICAgIHJ1biBhIHBhcnNlIGV4cHJlc3Npb24gYWdhaW5zdCBhIGxpc3Qgb2Ygc2FtcGxlIHN0cmluZ3MuCgogICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgIC0gdGVzdHMgLSBhIGxpc3Qgb2Ygc2VwYXJhdGUgdGVzdCBzdHJpbmdzLCBvciBhIG11bHRpbGluZSBzdHJpbmcgb2YgdGVzdCBzdHJpbmdzCiAgICAgICAgIC0gcGFyc2VBbGwgLSAoZGVmYXVsdD0gYGBUcnVlYGApIC0gZmxhZyB0byBwYXNzIHRvIDpjbGFzczpgcGFyc2VTdHJpbmdgIHdoZW4gcnVubmluZyB0ZXN0cwogICAgICAgICAtIGNvbW1lbnQgLSAoZGVmYXVsdD0gYGAnIydgYCkgLSBleHByZXNzaW9uIGZvciBpbmRpY2F0aW5nIGVtYmVkZGVkIGNvbW1lbnRzIGluIHRoZSB0ZXN0CiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PSBgYFRydWVgYCkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCiAgICAgICAgIC0gcG9zdFBhcnNlIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBvcHRpb25hbCBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBwYXJzZSByZXN1bHRzOyBjYWxsZWQgYXMKICAgICAgICAgICAgICBgZm4odGVzdF9zdHJpbmcsIHBhcnNlX3Jlc3VsdHMpYCBhbmQgcmV0dXJucyBhIHN0cmluZyB0byBiZSBhZGRlZCB0byB0aGUgdGVzdCBvdXRwdXQKICAgICAgICAgLSBmaWxlIC0gKGRlZmF1bHQ9YGBOb25lYGApIG9wdGlvbmFsIGZpbGUtbGlrZSBvYmplY3QgdG8gd2hpY2ggdGVzdCBvdXRwdXQgd2lsbCBiZSB3cml0dGVuOwogICAgICAgICAgICAgIGlmIE5vbmUsIHdpbGwgZGVmYXVsdCB0byBgYHN5cy5zdGRvdXRgYAoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBgYGZhaWx1cmVUZXN0c2BgIGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaAogICAgICAgIHRlc3QncyBvdXRwdXQKCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgMyksIChsaW5lOjEsIGNvbDo0KQoKICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAtLjEwMAogICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIHtyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24gfCByZWFsIG51bWJlciB8IHNpZ25lZCBpbnRlZ2VyfSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29s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AAgBBAljAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCIcAZgFkA2QEhAlaBGQJZAZkB4QBWgWHAAQAWgZTACkKcoAAAABhnAUAAEEgdmFyaWF0aW9uIG9uIDpjbGFzczpgTGl0ZXJhbGAgd2hpY2ggbWF0Y2hlcyAiY2xvc2UiIG1hdGNoZXMsCiAgICB0aGF0IGlzLCBzdHJpbmdzIHdpdGggYXQgbW9zdCAnbicgbWlzbWF0Y2hpbmcgY2hhcmFjdGVycy4KICAgIDpjbGFzczpgQ2xvc2VNYXRjaGAgdGFrZXMgcGFyYW1ldGVyczoKCiAgICAgLSBgYG1hdGNoX3N0cmluZ2BgIC0gc3RyaW5nIHRvIGJlIG1hdGNoZWQKICAgICAtIGBgbWF4TWlzbWF0Y2hlc2BgIC0gKGBgZGVmYXVsdD0xYGApIG1heGltdW0gbnVtYmVyIG9mCiAgICAgICBtaXNtYXRjaGVzIGFsbG93ZWQgdG8gY291bnQgYXMgYSBtYXRjaAoKICAgIFRoZSByZXN1bHRzIGZyb20gYSBzdWNjZXNzZnVsIHBhcnNlIHdpbGwgY29udGFpbiB0aGUgbWF0Y2hlZCB0ZXh0CiAgICBmcm9tIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBmb2xsb3dpbmcgbmFtZWQgcmVzdWx0czoKCiAgICAgLSBgYG1pc21hdGNoZXNgYCAtIGEgbGlzdCBvZiB0aGUgcG9zaXRpb25zIHdpdGhpbiB0aGUKICAgICAgIG1hdGNoX3N0cmluZyB3aGVyZSBtaXNtYXRjaGVzIHdlcmUgZm91bmQKICAgICAtIGBgb3JpZ2luYWxgYCAtIHRoZSBvcmlnaW5hbCBtYXRjaF9zdHJpbmcgdXNlZCB0byBjb21wYXJlCiAgICAgICBhZ2FpbnN0IHRoZSBpbnB1dCBzdHJpbmcKCiAgICBJZiBgYG1pc21hdGNoZXNgYCBpcyBhbiBlbXB0eSBsaXN0LCB0aGVuIHRoZSBtYXRjaCB3YXMgYW4gZXhhY3QKICAgIG1hdGNoLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIpCiAgICAgICAgcGF0dC5w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aGFyYWN0ZXIgc2V0KSwgYW5kIGFuIG9wdGlvbmFsIG1pbmltdW0sCiAgICBtYXhpbXVtLCBhbmQvb3IgZXhhY3QgbGVuZ3RoLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGBgbWluYGAgaXMKICAgIDEgKGEgbWluaW11bSB2YWx1ZSA8IDEgaXMgbm90IHZhbGlkKTsgdGhlIGRlZmF1bHQgdmFsdWVzIGZvcgogICAgYGBtYXhgYCBhbmQgYGBleGFjdGBgIGFyZSAwLCBtZWFuaW5nIG5vIG1heGltdW0gb3IgZXhhY3QKICAgIGxlbmd0aCByZXN0cmljdGlvbi4gQW4gb3B0aW9uYWwgYGBleGNsdWRlQ2hhcnNgYCBwYXJhbWV0ZXIgY2FuCiAgICBsaXN0IGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBmb3VuZCBpbiB0aGUgaW5wdXQgYGBib2R5Q2hhcnNgYAogICAgc3RyaW5nOyB1c2VmdWwgdG8gZGVmaW5lIGEgd29yZCBvZiBhbGwgcHJpbnRhYmxlcyBleGNlcHQgZm9yIG9uZSBvcgogICAgdHdvIGNoYXJhY3RlcnMsIGZvciBpbnN0YW5jZS4KCiAgICA6Y2xhc3M6YHNyYW5nZWAgaXMgdXNlZnVsIGZvciBkZWZpbmluZyBjdXN0b20gY2hhcmFjdGVyIHNldCBzdHJpbmdzCiAgICBmb3IgZGVmaW5pbmcgYGBXb3JkYGAgZXhwcmVzc2lvbnMsIHVzaW5nIHJhbmdlIG5vdGF0aW9uIGZyb20KICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBjaGFyYWN0ZXIgc2V0cy4KCiAgICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHVzZSA6Y2xhc3M6YFdvcmRgIHRvIG1hdGNoIGEgc3BlY2lmaWMgbGl0ZXJhbAogICAgc3RyaW5nLCBhcyBpbiBgYFdvcmQoIkFkZHJlc3MiKWBgLiBSZW1lbWJlciB0aGF0IDpjbGFzczpgV29yZGAKICAgIHVzZXMgdGhlIHN0cmluZyBhcmd1bWVudCB0byBkZWZpbmUgKnNldHMqIG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLgogICAgVGhpcyBleHByZXNzaW9uIHdvdWxkIG1hdGNoICJBZGQiLCAiQUFBIiwgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQKICAgIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgJ0EnLCAnZCcsICdyJywgJ2UnLCBhbmQgJ3MnLiBUbyBtYXRjaCBhbgogICAgZXhhY3QgbGl0ZXJhbCBzdHJpbmcsIHVzZSA6Y2xhc3M6YExpdGVyYWxgIG9yIDpjbGFzczpgS2V5d29yZGAuCgogICAgcHlwYXJzaW5nIGluY2x1ZGVzIGhlbHBlciBzdHJpbmdzIGZvciBidWlsZGluZyBXb3JkczoKCiAgICAgLSA6Y2xhc3M6YGFscGhhc2AKICAgICAtIDpjbGFzczpgbnVtc2AKICAgICAtIDpjbGFzczpgYWxwaGFudW1zYAogICAgIC0gOmNsYXNzOmBoZXhudW1zYAogICAgIC0gOmNsYXNzOmBhbHBoYXM4Yml0YCAoYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlIDEyOC0yNTUKICAgICAgIC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAgLSA6Y2xhc3M6YHB1bmM4Yml0YCAobm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZQogICAgICAgMTI4LTI1NSAtIGN1cnJlbmN5LCBzeW1ib2xzLCBzdXBlcnNjcmlwdHMsIGRpYWNyaXRpY2FscywgZXRjLikKICAgICAtIDpjbGFzczpgcHJpbnRhYmxlc2AgKGFueSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIpCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgYSB3b3JkIGNvbXBvc2VkIG9mIGRpZ2l0cwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpICMgZXF1aXZhbGVudCB0byBXb3JkKCIwMTIzNDU2Nzg5Iikgb3IgV29yZChzcmFuZ2UoIjAtOSIpKQoKICAgICAgICAjIGEgd29yZCB3aXRoIGEgbGVhZGluZyBjYXBpdGFsLCBhbmQgemVybyBvciBtb3JlIGxvd2VyY2FzZQogICAgICAgIGNhcGl0YWxfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5s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YXNoCiAgICAgICAgICAoZGVmYXVsdD0gYGBOb25lYGApCiAgICAgICAgLSBlc2NRdW90ZSAtIHNwZWNpYWwgcXVvdGUgc2VxdWVuY2UgdG8gZXNjYXBlIGFuIGVtYmVkZGVkIHF1b3RlCiAgICAgICAgICBzdHJpbmcgKHN1Y2ggYXMgU1FMJ3MgYGAiImBgIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCBgYCJgYCkKICAgICAgICAgIChkZWZhdWx0PSBgYE5vbmVgYCkKICAgICAgICAtIG11bHRpbGluZSAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHF1b3RlcyBjYW4gc3BhbgogICAgICAgICAgbXVsdGlwbGUgbGluZXMgKGRlZmF1bHQ9IGBgRmFsc2VgYCkKICAgICAgICAtIHVucXVvdGVSZXN1bHRzIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hdGNoZWQgdGV4dAogICAgICAgICAgc2hvdWxkIGJlIHVucXVvdGVkIChkZWZhdWx0PSBgYFRydWVgYCkKICAgICAgICAtIGVuZFF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZQogICAgICAgICAgZW5kIG9mIHRoZSBxdW90ZSBkZWxpbWl0ZWQgc3RyaW5nIChkZWZhdWx0PSBgYE5vbmVgYCAgPT4gc2FtZSBhcwogICAgICAgICAgcXVvdGVDaGFyKQogICAgICAgIC0gY29udmVydFdoaXRlc3BhY2VFc2NhcGVzIC0gY29udmVydCBlc2NhcGVkIHdoaXRlc3BhY2UKICAgICAgICAgIChgYCdcdCdgYCwgYGAnXG4nYGAsIGV0Yy4pIHRvIGFjdHVhbCB3aGl0ZXNwYWNlCiAgICAgICAgICAoZGVmYXVsdD0gYGBUcnVlYGApCgogICAgRXhhbXBsZTo6CgogICAgICAgIHFzID0gUXVvdGVkU3RyaW5nKCciJykKICAgICAgICBwcmludChxcy5zZWFyY2hTdHJpbmcoJ2xzamRmICJUaGlzIGlzIHRoZSBxdW90ZSIgc2xkamYnKSkKICAgICAgICBjb21wbGV4X3FzID0gUXVvdGVkU3RyaW5n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IG9uZU9mKCJSRUQgT1JBTkdFIFlFTExPVyBHUkVFTiBCTFVFIFBVUlBMRSBCTEFDSyBXSElURSBCUk9XTiIpCiAgICAgICAgc2hhcGVfdHlwZSA9IG9uZU9mKCJTUVVBUkUgQ0lSQ0xFIFRSSUFOR0xFIFNUQVIgSEVYQUdPTiBPQ1RBR09OIikKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIHNoYXBlX2F0dHIgPSAic2hhcGU6IiArIHNoYXBlX3R5cGUoInNoYXBlIikKICAgICAgICBwb3NuX2F0dHIgPSAicG9zbjoiICsgR3JvdXAoaW50ZWdlcigieCIpICsgJywnICsgaW50ZWdlcigieSIpKSgicG9zbiIpCiAgICAgICAgY29sb3JfYXR0ciA9ICJjb2xvcjoiICsgY29sb3IoImNvbG9yIikKICAgICAgICBzaXplX2F0dHIgPSAic2l6ZToiICsgaW50ZWdlcigic2l6ZSIpCgogICAgICAgICMgdXNlIEVhY2ggKHVzaW5nIG9wZXJhdG9yICcmJykgdG8gYWNjZXB0IGF0dHJpYnV0ZXMgaW4gYW55IG9yZGVyCiAgICAgICAgIyAoc2hhcGUgYW5kIHBvc24gYXJlIHJlcXVpcmVkLCBjb2xvciBhbmQgc2l6ZSBhcmUgb3B0aW9uYWwpCiAgICAgICAgc2hhcGVfc3BlYyA9IHNoYXBlX2F0dHIgJiBwb3NuX2F0dHIgJiBPcHRpb25hbChjb2xvcl9hdHRyKSAmIE9wdGlvbmFsKHNpemVfYXR0cikKCiAgICAgICAgc2hhcGVfc3BlYy5ydW5UZXN0cygnJycKICAgICAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgICAgICBjb2xvcjpHUkVFTiBzaXplOjIwIHNoYXBlOlRSSUFOR0xFIHBvc246MjAsNDAKICAgICAgICAgICAgJycnCiAgICAgICAgICAgICkKCiAgICBwcmludHM6OgoKICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgIFsnc2hhcGU6JywgJ1NRVUFSRScsICdjb2xvcjonLCAnQkxBQ0snLCAncG9zbjonLCBbJzEwMCcsICcsJywgJzEyMCddXQogICAgICAgIC0gY29sb3I6IEJMQUNLCiAgICAgICAgLSBwb3NuOiBbJzEwMCcsICcsJywgJzEyMCddCiAgICAgICAgICAtIHg6IDEwMAogICAgICAgICAgLSB5OiAxMjAKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKCgogICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICBbJ3NoYXBlOicsICdDSVJDTEUnLCAnc2l6ZTonLCAnNTAnLCAnY29sb3I6JywgJ0JMVUUnLCAncG9zbjonLCBbJzUwJywgJywnLCAnODAnXV0KICAgICAgICAtIGNvbG9yOiBCTFVFCiAgICAgICAgLSBwb3NuOiBbJzUwJywgJywnLCAnODAnXQogICAgICAgICAgLSB4OiA1MAogICAgICAgICAgLSB5OiA4MAogICAgICAgIC0gc2hhcGU6IENJUkNMRQogICAgICAgIC0gc2l6ZTogNTAKCgogICAgICAgIGNvbG9yOiBHUkVFTiBzaXplOiAyMCBzaGFwZTogVFJJQU5HTEUgcG9zbjogMjAsNDAKICAgICAgICBbJ2NvbG9yOicsICdHUkVFTicsICdzaXplOicsICcyMCcsICdzaGFwZTonLCAnVFJJQU5HTEUnLCAncG9zbjonLCBbJzIwJywgJywnLCAnNDAnXV0KICAgICAgICAtIGNvbG9yOiBHUkVFTgogICAgICAgIC0gcG9zbjogWycyMCcsICcsJywgJzQwJ10KICAgICAgICAgIC0geDogMjAKICAgICAgICAgIC0geTogNDAKICAgICAgICAtIHNoYXBlOiBUUklBTkdMRQogICAgICAgIC0gc2l6ZTogMjAKICAgIFRjAwAAAAAAAAAAAAAAAwAAAAQAAAADAAAAcz4AAAB0AHQBfACDAqACfAF8AqECAQB0A2QBZAKEAHwAagREAIMBgwF8AF8FZAN8AF8GZAN8AF8HZAN8AF8IZABTACkETmMBAAAA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ZABaAmQBWgOHAGYBZAJkA4QIWgRkB2QFZAaEAVoFhwAEAFoGUwApCHIgAAAAYWIDAABMb29rYWhlYWQgbWF0Y2hpbmcgb2YgdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uCiAgICBgYEZvbGxvd2VkQnlgYCBkb2VzICpub3QqIGFkdmFuY2UgdGhlIHBhcnNpbmcgcG9zaXRpb24gd2l0aGluCiAgICB0aGUgaW5wdXQgc3RyaW5nLCBpdCBvbmx5IHZlcmlmaWVzIHRoYXQgdGhlIHNwZWNpZmllZCBwYXJzZQogICAgZXhwcmVzc2lvbiBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLiAgYGBGb2xsb3dlZEJ5YGAKICAgIGFsd2F5cyByZXR1cm5zIGEgbnVsbCB0b2tlbiBsaXN0LiBJZiBhbnkgcmVzdWx0cyBuYW1lcyBhcmUgZGVmaW5lZAogICAgaW4gdGhlIGxvb2thaGVhZCBleHByZXNzaW9uLCB0aG9zZSAqd2lsbCogYmUgcmV0dXJuZWQgZm9yIGFjY2VzcyBieQogICAgbmFtZS4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyB1c2UgRm9sbG93ZWRCeSB0byBtYXRjaCBhIGxhYmVsIG9ubHkgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYSAnOicKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZygic2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogdXBwZXIgbGVmdCIpLnBwcmludCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsnY29sb3InLCAnQkxBQ0snXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXV0KICAgIGMCAAAAAAAAAAAAAAACAAAAAwAAAAMAAABzGgAAAHQAdAF8AIMCoAJ8AaEBAQBkAXwAXwNkAFMAcv4AAAApBHJRAgAAciAAAABywQAAAHK1AQAAqQJyvwAAAHKLAQAAclQCAAByEQAAAHISAAAAcsEAAACbEQAAcwQAAAAAARABehNGb2xsb3dlZEJ5Ll9faW5pdF9fVGMEAAAAAAAAAAAAAAAGAAAABQAAAEMAAABzKAAAAHwAagBqAXwBfAJ8A2QBjQNcAn0EfQV8BWQAZACFAj0AfAJ8BWYCUwApAk5y6wEAACkCcosBAABy0gEAACkGcr8AAAByigEAAHK7AAAAcs0BAADaAV9ymgAAAHIRAAAAchEAAAByEgAAAHLbAAAAnxEAAHMGAAAAAAMWAQoCehRGb2xsb3dlZEJ5LnBhcnNlSW1wbCkBVHJxAgAAchEAAAByEQAAAHJUAgAAchIAAAByIAAAAIURAABzBgAAAAgBBBUMBGMAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABzLAAAAGUAWgFkAFoCZAFaA2QJhwBmAWQDZASECVoEZApkB2QIhAFaBYcABABaBlMAKQtyKAAAAGFwBAAATG9va2JlaGluZCBtYXRjaGluZyBvZiB0aGUgZ2l2ZW4gcGFyc2UgZXhwcmVzc2lvbi4KICAgIGBgUHJlY2VkZWRCeWBgIGRvZXMgbm90IGFkdmFuY2UgdGhlIHBhcnNpbmcgcG9zaXRpb24gd2l0aGluIHRoZQogICAgaW5wdXQgc3RyaW5nLCBpdCBvbmx5IHZlcmlmaWVzIHRoYXQgdGhlIHNwZWNpZmllZCBwYXJzZSBleHByZXNzaW9uCiAgICBtYXRjaGVzIHByaW9yIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLiAgYGBQcmVjZWRlZEJ5YGAgYWx3YXlzCiAgICByZXR1cm5zIGEgbnVsbCB0b2tlbiBsaXN0LCBidXQgaWYgYSByZXN1bHRzIG5hbWUgaXMgZGVmaW5lZCBvbiB0aGUKICAgIGdpdmVuIGV4cHJlc3Npb24sIGl0IGlzIHJldHVybmVkLgoKICAgIFBhcmFtZXRlcnM6CgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIHByaW9yIHRvIHRoZSBjdXJyZW50IHBhcnNlCiAgICAgICBsb2NhdGlvbgogICAgIC0gcmV0cmVhdCAtIChkZWZhdWx0PSBgYE5vbmVgYCkgLSAoaW50KSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgICAgICB0byBsb29rYmVoaW5kIHByaW9yIHRvIHRoZSBjdXJyZW50IHBhcnNlIGxvY2F0aW9uCgogICAgSWYgdGhlIGxvb2tiZWhpbmQgZXhwcmVzc2lvbiBpcyBhIHN0cmluZywgTGl0ZXJhbCwgS2V5d29yZCwgb3IKICAgIGEgV29yZCBvciBDaGFyc05vdEluIHdpdGggYSBzcGVjaWZpZWQgZXhhY3Qgb3IgbWF4aW11bSBsZW5ndGgsIHRoZW4KICAgIHRoZSByZXRyZWF0IHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQuIE90aGVyd2lzZSwgcmV0cmVhdCBtdXN0IGJlCiAgICBzcGVjaWZpZWQgdG8gZ2l2ZSBhIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gbG9vayBiYWNrIGZyb20KICAgIHRoZSBjdXJyZW50IHBhcnNlIHBvc2l0aW9uIGZvciBhIGxvb2tiZWhpbmQgbWF0Y2guCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgVkItc3R5bGUgdmFyaWFibGUgbmFtZXMgd2l0aCB0eXBlIHByZWZpeGVzCiAgICAgICAgaW50X3ZhciA9IFByZWNlZGVkQnkoIiMiKSArIHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllcgogICAgICAgIHN0cl92YXIgPSBQcmVjZWRlZEJ5KCIkIikgKyBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIKCiAgICBOYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHO+AAAAdAB0AXwAgwKgAnwBoQEBAHwAoAOhAKAEoQB8AF8DZAF8AF8FZAJ8AF8GZAJ8AF8HdAh8AXQJgwJySnQKfAGDAX0CZAF8AF8HblZ0CHwBdAt0DGYCgwJyZnwBag19AmQBfABfB246dAh8AXQOdA9mAoMCcox8AWoQdBFrA3KMfAFqEH0CZAF8AF8HbhR0CHwBdBKDAnKgZAN9AmQBfABfB3wCfABfE2QEdAl8AYMBFwB8AF8UZAJ8AF8VZABTACkFTlRGcgEAAAB6EG5vdCBwcmVjZWRlZCBieSApFnJRAgAAcigAAABywQAAAHKLAQAAckMCAABytQEAAHK6AQAAcp8CAABykAAAAHKSAAAAcskAAAByJwAAAHIkAAAAcnQCAAByQgAAAHIbAAAAcpUCAAByaAIAAHLRAgAA2gdyZXRyZWF0crsBAABysgEAACkDcr8AAAByiwEAAHIEAwAAclQCAAByEQAAAHISAAAAcsEAAADEEQAAcygAAAAAARABDgEGAQYBBgEKAQgBCAEOAQYBCAEYAQYBCAEKAQQBBgEGAQ4BehNQcmVjZWRlZEJ5Ll9faW5pdF9fcgEAAABUYwQAAAAAAAAAAAAAAAwAAAALAAAAQwAAAHPYAAAAfABqAHI8fAJ8AGoBawByHnQCfAF8AnwAagODA4IBfAJ8AGoBGAB9BHwAagSgBXwBfAShAlwCfQV9Bm6KfABqBHQGgwAXAH0HfAFkAHwChQIZAH0IdAJ8AXwCfABqA4MDfQl0B2QBdAh8AnwAagFkARcAgwKDAkQAXUh9CnoYfAegBXwIfAJ8ChgAoQJcAn0FfQZXAG4mBAB0CWsKcroBAH0LAQB6CHwLfQlXADUAZAB9C34LWABZAHF4WAABAHHGcXh8CYIBfAZkAGQAhQI9AHwCfAZmAlMAcuABAAApCnKfAgAAcgQDAAByMgAAAHK7AQAAcosBAABy0gEAAHI8AAAAch4BAABynQIAAHIwAAAAKQxyvwAAAHKKAQAAcrsAAAByzQEAAHKIAgAAcgMDAABymgAAAFoJdGVzdF9leHByWg5pbnN0cmluZ19zbGljZVoJbGFzdF9leHByck0BAABaA3BiZXIRAAAAchEAAAByEgAAAHLbAAAA2hEAAHMiAAAAAAEGAQoBDgEKARQDDAEMAQ4BGgECARgBEAEWAgYCBAIKAXoUUHJlY2VkZWRCeS5wYXJzZUltcGwpAU4pAnIBAAAAVHJxAgAAchEAAAByEQAAAHJUAgAAchIAAAByKAAAAKgRAABzBgAAAAgBBBsOFmMAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABzMgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQJZAVkBoQBWgVkB2QIhABaBocABABaB1MAKQpyKwAAAGG5AwAATG9va2FoZWFkIHRvIGRpc2FsbG93IG1hdGNoaW5nIHdpdGggdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uCiAgICBgYE5vdEFueWBgIGRvZXMgKm5vdCogYWR2YW5jZSB0aGUgcGFyc2luZyBwb3NpdGlvbiB3aXRoaW4gdGhlCiAgICBpbnB1dCBzdHJpbmcsIGl0IG9ubHkgdmVyaWZpZXMgdGhhdCB0aGUgc3BlY2lmaWVkIHBhcnNlIGV4cHJlc3Npb24KICAgIGRvZXMgKm5vdCogbWF0Y2ggYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uICBBbHNvLCBgYE5vdEFueWBgIGRvZXMKICAgICpub3QqIHNraXAgb3ZlciBsZWFkaW5nIHdoaXRlc3BhY2UuIGBgTm90QW55YGAgYWx3YXlzIHJldHVybnMKICAgIGEgbnVsbCB0b2tlbiBsaXN0LiAgTWF5IGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSAnficgb3BlcmF0b3IuCgogICAgRXhhbXBsZTo6CgogICAgICAgIEFORCwgT1IsIE5PVCA9IG1hcChDYXNlbGVzc0tleXdvcmQsICJBTkQgT1IgTk9UIi5zcGxpdCgpKQoKICAgICAgICAjIHRha2UgY2FyZSBub3QgdG8gbWlzdGFrZSBrZXl3b3JkcyBmb3IgaWRlbnRpZmllcnMKICAgICAgICBpZGVudCA9IH4oQU5EIHwgT1IgfCBOT1QpICsgV29yZChhbHBoYXMpCiAgICAgICAgYm9vbGVhbl90ZXJtID0gT3B0aW9uYWwoTk9UKSArIGlkZW50CgogICAgICAgICMgdmVyeSBjcnVkZSBib29sZWFuIGV4cHJlc3Npb24gLSB0byBzdXBwb3J0IHBhcmVudGhlc2lzIGdyb3VwcyBhbmQKICAgICAgICAjIG9wZXJhdGlvbiBoaWVyYXJjaHksIHVzZSBpbmZpeE5vdGF0aW9uCiAgICAgICAgYm9vbGVhbl9leHByID0gYm9vbGVhbl90ZXJtICsgWmVyb09yTW9yZSgoQU5EIHwgT1IpICsgYm9vbGVhbl90ZXJtKQoKICAgICAgICAjIGludGVnZXJzIHRoYXQgYXJlIGZvbGxvd2VkIGJ5ICIuIiBh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ZChudW1zLCBleGFjdD00KSkpCiAgICAgICAgemlwLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHRyYWRpdGlvbmFsIFpJUCBjb2RlCiAgICAgICAgICAgIDEyMzQ1CgogICAgICAgICAgICAjIFpJUCs0IGZvcm0KICAgICAgICAgICAgMTIxMDEtMDAwMQoKICAgICAgICAgICAgIyBpbnZhbGlkIFpJUAogICAgICAgICAgICA5ODc2NS0KICAgICAgICAgICAgJycnKQoKICAgIHByaW50czo6CgogICAgICAgICMgdHJhZGl0aW9uYWwgWklQIGNvZGUKICAgICAgICAxMjM0NQogICAgICAgIFsnMTIzNDUnXQoKICAgICAgICAjIFpJUCs0IGZvcm0KICAgICAgICAxMjEwMS0wMDAxCiAgICAgICAgWycxMjEwMS0wMDAxJ10KCiAgICAgICAgIyBpbnZhbGlkIFpJUAogICAgICAgIDk4NzY1LQogICAgICAgICAgICAgXgogICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDUpLCAobGluZToxLCBjb2w6NikKICAgIGMDAAAAAAAAAAAAAAADAAAABAAAAAMAAABzLgAAAHQAdAF8AIMCagJ8AWQBZAKNAgEAfABqA2oEfABfBHwCfABfBWQDfABfBmQAUwApBE5Gcm8CAABUKQdyUQIAAHIuAAAAcsEAAAByiwEAAHKxAQAAckEBAABytQEAACkDcr8AAAByiwEAAHI8AQAAclQCAAByEQAAAHISAAAAcsEAAADJEgAAcwgAAAAAARQBCgEGAXoRT3B0aW9uYWwuX19pbml0X19UYwQAAAAAAAAAAAAAAAUAAAAJAAAAQwAAAHN8AAAAehx8AGoAagF8AXwCfANkAWQCjQRcAn0CfQRXAG5WBAB0AnQDZgJrCnJyAQABAAEAfABqBHwAagVrCXJqfABqAGoGcmB0B3wAagRnAYMBfQR8AGoEfAR8AGoAagY8AHFufABqBGcBfQRuBGcAfQRZAG4CWAB8AnwEZgJTAHIKAwAAKQhyiwEAAHLSAQAAcjIAAAByEwEAAHJBAQAA2h1fT3B0aW9uYWxfX29wdGlvbmFsTm90TWF0Y2hlZHKwAQAAcjUAAAApBXK/AAAAcooBAAByuwAAAHLNAQAAcukBAAByEQAAAHIRAAAAchIAAABy2wAAAM8SAABzFAAAAAABAgEcARIBDAEIAQwBEAIKAgoBehJPcHRpb25hbC5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROcgMBAAByVQEAAHJYAQAAcgUDAAByzAAAAHIRAAAAchEAAAByEgAAAHLKAAAA3RIAAHMKAAAAAAEKAQYCCgEUAnoQT3B0aW9uYWwuX19zdHJfXykBVCkKcg4AAAByDwAAAHIQAAAActUAAAByDAMAAHINAwAAcsEAAABy2wAAAHLKAAAAcmkCAAByEQAAAHIRAAAAclQCAAByEgAAAHIuAAAAohIAAHMKAAAACAEEJAYCEAYKDmMAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABzLAAAAGUAWgFkAFoCZAFaA2QJhwBmAWQEZAWECVoEZApkB2QIhAFaBYcABABaBlMAKQtyOwAAAGH4CQAAVG9rZW4gZm9yIHNraXBwaW5nIG92ZXIgYWxsIHVuZGVmaW5lZCB0ZXh0IHVudGlsIHRoZSBtYXRjaGVkCiAgICBleHByZXNzaW9uIGlzIGZvdW5kLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gdGFyZ2V0IGV4cHJlc3Npb24gbWFya2luZyB0aGUgZW5kIG9mIHRoZSBkYXRhIHRvIGJlIHNraXBwZWQKICAgICAtIGluY2x1ZGUgLSAoZGVmYXVsdD0gYGBGYWxzZWBgKSBpZiBUcnVlLCB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgYWxzbyBwYXJzZWQKICAgICAgICAgICh0aGUgc2tpcHBlZCB0ZXh0IGFuZCB0YXJnZXQgZXhwcmVzc2lvbiBhcmUgcmV0dXJuZWQgYXMgYSAyLWVsZW1lbnQgbGlzdCkuCiAgICAgLSBpZ25vcmUgLSAoZGVmYXVsdD0gYGBOb25lYGApIHVzZWQgdG8gZGVmaW5lIGdyYW1tYXJzICh0eXBpY2FsbHkgcXVvdGVkIHN0cmluZ3MgYW5kCiAgICAgICAgICBjb21tZW50cykgdGhhdCBtaWdodCBjb250YWluIGZhbHNlIG1hdGNoZXMgdG8gdGhlIHRhcmdldCBleHByZXNzaW9uCiAgICAgLSBmYWlsT24gLSAoZGVmYXVsdD0gYGBOb25lYGApIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBiZQogICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIHNraXBwZWQgdGVzdDsgaWYgZm91bmQgYmVmb3JlIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBmb3VuZCwKICAgICAgICAgIHRoZSBTa2lwVG8gaXMgbm90IGEgbWF0Y2gKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcmVwb3J0ID0gJycnCiAgICAgICAgICAgIE91dHN0YW5kaW5nIElzc3VlcyBSZXBvcnQgLSAxIEphbiAyMDAwCgogICAgICAgICAgICAgICAjIHwgU2V2ZXJpdHkgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEYXlzIE9wZW4KICAgICAgICAgICAgLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCiAgICAgICAgICAgICAxMDEgfCBDcml0aWNhbCB8IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2ggICAgICAgICAgICAgICAgIHwgICAgICAgICAgNgogICAgICAgICAgICAgIDk0IHwgQ29zbWV0aWMgfCBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykgICAgICAgICB8ICAgICAgICAgMTQKICAgICAgICAgICAgICA3OSB8IE1pbm9yICAgIHwgU3lzdGVtIHNsb3cgd2hlbiBydW5uaW5nIHRvbyBtYW55IHJlcG9ydHMgfCAgICAgICAgIDQ3CiAgICAgICAgICAgICcnJwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgU0VQID0gU3VwcHJlc3MoJ3wnKQogICAgICAgICMgdXNlIFNraXBUbyB0byBzaW1wbHkgbWF0Y2ggZXZlcnl0aGluZyB1cCB1bnRpbCB0aGUgbmV4dCBTRVAKICAgICAgICAjIC0gaWdub3JlIHF1b3RlZCBzdHJpbmdzLCBzbyB0aGF0IGEgJ3wnIGNoYXJhY3RlciBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nIGRvZXMgbm90IG1hdGNoCiAgICAgICAgIyAtIHBhcnNlIGFjdGlvbiB3aWxsIGNhbGwgdG9rZW4uc3RyaXAoKSBmb3IgZWFjaCBtYXRjaGVkIHRva2VuLCBpLmUuLCB0aGUgZGVzY3JpcHRpb24gYm9keQogICAgICAgIHN0cmluZ19kYXRhID0gU2tpcFRvKFNFUCwgaWdub3JlPXF1b3RlZFN0cmluZykKICAgICAgICBzdHJpbmdfZGF0YS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIuc3RyaXApKQogICAgICAgIHRpY2tldF9leHByID0gKGludGVnZXIoImlzc3VlX251bSIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJzZXYiKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIoImRheXNfb3BlbiIpKQoKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAgICAgICAgICBwcmludCB0a3QuZHVtcCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgWycxMDEnLCAnQ3JpdGljYWwnLCAnSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCcsICc2J10KICAgICAgICAtIGRheXNfb3BlbjogNgogICAgICAgIC0gZGVzYzogSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaAogICAgICAgIC0gaXNzdWVfbnVtOiAxMDEKICAgICAgICAtIHNldjogQ3JpdGljYWwKICAgICAgICBbJzk0JywgJ0Nvc21ldGljJywgIlNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSIsICcxNCddCiAgICAgICAgLSBkYXlzX29wZW46IDE0CiAgICAgICAg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UwApBnIdAAAAYT8GAABDb252ZXJ0ZXIgdG8gcmV0dXJuIGEgcmVwZXRpdGl2ZSBleHByZXNzaW9uIGFzIGEgbGlzdCwgYnV0IGFsc28KICAgIGFzIGEgZGljdGlvbmFyeS4gRWFjaCBlbGVtZW50IGNhbiBhbHNvIGJlIHJlZmVyZW5jZWQgdXNpbmcgdGhlIGZpcnN0CiAgICB0b2tlbiBpbiB0aGUgZXhwcmVzc2lvbiBhcyBpdHMga2V5LiBVc2VmdWwgZm9yIHRhYnVsYXIgcmVwb3J0CiAgICBzY3JhcGluZyB3aGVuIHRoZSBmaXJzdCBjb2x1bW4gY2FuIGJlIHVzZWQgYXMgYSBpdGVtIGtleS4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgICMgcHJpbnQgYXR0cmlidXRlcyBhcyBwbGFpbiBncm91cHMKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCgogICAgICAgICMgaW5zdGVhZCBvZiBPbmVPck1vcmUoZXhwciksIHBhcnNlIHVzaW5nIERpY3QoT25lT3JNb3JlKEdyb3VwKGV4cHIpKSkgLSBEaWN0IHdpbGwgYXV0by1hc3NpZ24gbmFtZXMKICAgICAgICByZXN1bHQgPSBEaWN0KE9uZU9y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TW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgYXR0cl9sYWJlbCA9IGxhYmVsCiAgICAgICAgYXR0cl92YWx1ZSA9IFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKQoKICAgICAgICAjIHNpbWlsYXIgdG8gRGljdCwgYnV0IHNpbXBsZXIgY2FsbCBmb3JtYXQKICAgICAgICByZXN1bHQgPSBkaWN0T2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkKICAgICAgICBwcmludChyZXN1bHQuc2hhcGUpICAjIG9iamVjdCBhdHRyaWJ1dGUgYWNjZXNzIHdvcmtzIHRvbwogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdsaWdodCBibHVlJ10sIFsndGV4dHVyZScsICdidXJsYXAnXV0KICAgICAgICAtIGNvbG9yOiBsaWdodCBibHVlCiAgICAgICAgLSBwb3NuOiB1cHBlciBsZWZ0CiAgICAgICAgLSBzaGFwZTogU1FVQVJFCiAgICAgICAgLSB0ZXh0dXJlOiBidXJsYXAKICAgICAgICBTUVVBUkUKICAgICAgICBTUVVBUkUKICAgICAgICB7J2NvbG9yJzogJ2xpZ2h0IGJsdWUnLCAnc2hhcGUnOiAnU1FVQVJFJywgJ3Bvc24nOiAndXBwZXIgbGVmdCcsICd0ZXh0dXJlJzogJ2J1cmxhcCd9CiAgICApA3IdAAAAciwAAAByIwAAACkCckABAAByJAEAAHIRAAAAchEAAAByEgAAAHJVAAAAjRUAAHMCAAAAACVjAgAAAAAAAAAAAAAABgAAAAQAAABDAAAAc14AAAB0AIMAoAFkAWQChAChAX0CfAKgAqEAfQNkA3wDXwN8AmQEgwF8ABcAfANkBYMBFwB9BHwBckBkBmQChAB9BW4IZAdkCIQAfQV8BKABfAWhAQEAfABqBHwEXwR8BFMAKQlhlwQAAEhlbHBlciB0byByZXR1cm4gdGhlIG9yaWdpbmFsLCB1bnRva2VuaXplZCB0ZXh0IGZvciBhIGdpdmVuCiAgICBleHByZXNzaW9uLiAgVXNlZnVsIHRvIHJlc3RvcmUgdGhlIHBhcnNlZCBmaWVsZHMgb2YgYW4gSFRNTCBzdGFydAogICAgdGFnIGludG8gdGhlIHJhdyB0YWcgdGV4dCBpdHNlbGYsIG9yIHRvIHJldmVydCBzZXBhcmF0ZSB0b2tlbnMgd2l0aAogICAgaW50ZXJ2ZW5pbmcgd2hpdGVzcGFjZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBtYXRjaGluZyBpbnB1dCB0ZXh0LiBCeQogICAgZGVmYXVsdCwgcmV0dXJucyBhc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHBhcnNlZCB0ZXh0LgoKICAgIElmIHRoZSBvcHRpb25hbCBgYGFzU3RyaW5nYGAgYXJndW1lbnQgaXMgcGFzc2VkIGFzCiAgICBgYEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBpcwogICAgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2AgY29udGFpbmluZyBhbnkgcmVzdWx0cyBuYW1lcyB0aGF0CiAgICB3ZXJlIG9yaWdpbmFsbHkgbWF0Y2hlZCwgYW5kIGEgc2luZ2xlIHRva2VuIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsCiAgICBtYXRjaGVkIHRleHQgZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiAgU28gaWYgdGhlIGV4cHJlc3Npb24gcGFzc2VkIHRvCiAgICA6Y2xhc3M6YG9yaWdpbmFsVGV4dEZvcmAgY29udGFpbnMgZXhwcmVzc2lvbnMgd2l0aCBkZWZpbmVkCiAgICByZXN1bHRzIG5hbWVzLCB5b3UgbXVzdCBzZXQgYGBhc1N0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aW9uIHRvIGFsbAogICAgZWxlbWVudHMgb2YgYSBQYXJzZVJlc3VsdHMgbGlzdC4gSWYgYW55IGFkZGl0aW9uYWwgYXJncyBhcmUgcGFzc2VkLAogICAgdGhleSBhcmUgZm9yd2FyZGVkIHRvIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cwogICAgYWZ0ZXIgdGhlIHRva2VuLCBhcyBpbgogICAgYGBoZXhfaW50ZWdlciA9IFdvcmQoaGV4bnVtcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoaW50LCAxNikpYGAsCiAgICB3aGljaCB3aWxsIGNvbnZlcnQgdGhlIHBhcnNlZCBkYXRhIHRvIGFuIGludGVnZXIgdXNpbmcgYmFzZSAxNi4KCiAgICBFeGFtcGxlIChjb21wYXJlIHRoZSBsYXN0IHRvIGV4YW1wbGUgaW4gOmNsYXNzOmBQYXJzZXJFbGVtZW50LnRyYW5zZm9ybVN0cmluZ2A6OgoKICAgICAgICBoZXhfaW50cyA9IE9uZU9yTW9yZShXb3JkKGhleG51bXMpKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSkKICAgICAgICBoZXhfaW50cy5ydW5UZXN0cygnJycKICAgICAgICAgICAgMDAgMTEgMjIgYWEgRkYgMGEgMGQgMWEKICAgICAgICAgICAgJycnKQoKICAgICAgICB1cHBlcndvcmQgPSBXb3JkKGFscGhhcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnVwcGVyKSkKICAgICAgICBPbmVPck1vcmUodXBwZXJ3b3JkKS5ydW5UZXN0cygnJycKICAgICAgICAgICAgbXkga2luZ2RvbSBmb3IgYSBob3JzZQogICAgICAgICAgICAnJycpCgogICAgICAgIHdkID0gV29yZChhbHBoYXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci50aXRsZSkpCiAgICAgICAgT25lT3JNb3JlKHdkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikucnVuVGVzdHMoJycnCiAgICAgICAgICAgIG5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50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AABIZWxwZXIgdG8gY3JlYXRlIGEgdmFsaWRhdGluZyBwYXJzZSBhY3Rpb24gdG8gYmUgdXNlZCB3aXRoIHN0YXJ0CiAgICB0YWdzIGNyZWF0ZWQgd2l0aCA6Y2xhc3M6YG1ha2VYTUxUYWdzYCBvcgogICAgOmNsYXNzOmBtYWtlSFRNTFRhZ3NgLiBVc2UgYGB3aXRoQXR0cmlidXRlYGAgdG8gcXVhbGlmeQogICAgYSBzdGFydGluZyB0YWcgd2l0aCBhIHJlcXVpcmVkIGF0dHJpYnV0ZSB2YWx1ZSwgdG8gYXZvaWQgZmFsc2UKICAgIG1hdGNoZXMgb24gY29tbW9uIHRhZ3Mgc3VjaCBhcyBgYDxURD5gYCBvciBgYDxESVY+YGAuCgogICAgQ2FsbCBgYHdpdGhBdHRyaWJ1dGVgYCB3aXRoIGEgc2VyaWVzIG9mIGF0dHJpYnV0ZSBuYW1lcyBhbmQKICAgIHZhbHVlcy4gU3BlY2lmeSB0aGUgbGlzdCBvZiBmaWx0ZXIgYXR0cmlidXRlcyBuYW1lcyBhbmQgdmFsdWVzIGFzOgoKICAgICAtIGtleXdvcmQgYXJndW1lbnRzLCBhcyBpbiBgYChhbGlnbj0icmlnaHQiKWBgLCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIGBgKipgYCBvcGVyYXRvciwgd2hlbiBhbiBhdHRyaWJ1dGUKICAgICAgIG5hbWUgaXMgYWxzbyBhIFB5dGhvbiByZXNlcnZlZCB3b3JkLCBhcyBpbiBgYCoqeyJjbGFzcyI6IkN1c3RvbWVyIiwgImFsaWduIjoicmlnaHQifWBgCiAgICAgLSBhIGxpc3Qgb2YgbmFtZS12YWx1ZSB0dXBsZXMsIGFzIGluIGBgKCgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwgInJpZ2h0IikpYGAKCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZAogICAgZm9ybS4gIEF0dHJpYnV0ZSBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgoKICAgIElmIGp1c3QgdGVzdGluZyBmb3IgYGBjbGFzc2BgICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UKICAgIDpjbGFzczpgd2l0aENsYXNzYC4KCiAgICBUbyB2ZXJpZnkgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0cywgYnV0IHdpdGhvdXQgc3BlY2lmeWluZyBhIHZhbHVlLAogICAgcGFzcyBgYHdpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFYGAgYXMgdGhlIHZhbHVlLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQoKICAgICAgICAjIG9ubHkgbWF0Y2ggZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSB3aXRoIHZhbHVlICJncmlkIgogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0dHJpYnV0ZSh0eXBlPSJncmlkIikpCiAgICAgICAgZ3JpZF9leHByID0gZGl2X2dyaWQgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBncmlkX2hlYWRlciBpbiBncmlkX2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChncmlkX2hlYWRlci5ib2R5KQoKICAgICAgICAjIGNvbnN0cnVjdCBhIG1hdGNoIHdpdGggYW55IGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlCiAgICAgICAgZGl2X2FueV90eXBlID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0dHJpYnV0ZSh0eXBlPXdpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFKSkKICAgICAgICBkaXZfZXhwciA9IGRpdl9hbnlfdHlwZSArIFNraXBUbyhkaXYgfCBkaXZfZW5kKSgiYm9keSIpCiAgICAgICAgZm9yIGRpdl9oZWFkZXIgaW4gZGl2X2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChkaXZfaGVhZGVyLmJvZHkpCgogICAgcHJpbnRzOjoKCiAgICAgICAgMSA0IDAgMSAwCgogICAgICAgIDEgNCAwIDEgMAogICAgICAgIDEsMyAyLDMgMSwxCiAgICBOYwEAAAAAAAAAAAAAAAMAAAAEAAAAUwAAAHMYAAAAZwB8AF0QXAJ9AX0CfAF8AmYCkQJxBFMAchEAAAByEQAAAHJhAQAAchEAAAByEQAAAHISAAAAchcBAAAPFwAAcwQAAAAGAAYAeiF3aXRoQXR0cmlidXRlLjxsb2NhbHM+LjxsaXN0Y29tcD5jAwAAAAAAAAAAAAAABQAAAAgAAAATAAAAc1oAAACIAEQAXVBcAn0DfQR8A3wCawdyJHQAfAB8AWQBfAMXAIMDggF8BHQBagJrA3IEfAJ8AxkAfARrA3IEdAB8AHwBZAJ8A3wCfAMZAHwEZgMWAIMDggFxBGQAUwApA056Fm5vIG1hdGNoaW5nIGF0dHJpYnV0ZSB6K2F0dHJpYnV0ZSAnJXMnIGhhcyB2YWx1ZSAnJXMnLCBtdXN0IGJlICclcycpA3IyAAAAcnkAAADaCUFOWV9WQUxVRSkFcqMAAABysQAAAHLpAQAAWghhdHRyTmFtZVoJYXR0clZhbHVlqQFaBWF0dHJzchEAAAByEgAAAHK2AAAAEBcAAHMOAAAAAAEMAQgBEAEWAQgBDP96GXdpdGhBdHRyaWJ1dGUuPGxvY2Fscz4ucGEpAXIhAQAAKQNyvgAAAFoIYXR0ckRpY3RytgAAAHIRAAAAclQDAAByEgAAAHJ5AAAA0xYAAHMMAAAAADgEAQ4CCAEOAQwHYwIAAAAAAAAAAAAAAAMAAAAEAAAAQwAAAHMeAAAAfAFyDGQBfAEWAG4CZAJ9AnQAZgB8AnwAaQGOAVMAKQNhyQMAAFNpbXBsaWZpZWQgdmVyc2lvbiBvZiA6Y2xhc3M6YHdpdGhBdHRyaWJ1dGVgIHdoZW4KICAgIG1hdGNoaW5nIG9uIGEgZGl2IGNsYXNzIC0gbWFkZSBkaWZmaWN1bHQgYmVjYXVzZSBgYGNsYXNzYGAgaXMKICAgIGEgcmVzZXJ2ZWQgd29yZCBpbiBQeXRob24uCgogICAgRXhhbXBsZTo6CgogICAgICAgIGh0bWwgPSAnJycKICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgU29tZSB0ZXh0CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmFwaCI+MSwzIDIsMyAxLDE8L2Rpdj4KICAgICAgICAgICAgPGRpdj50aGlzICZsdDtkaXYmZ3Q7IGhhcyBubyBjbGFzczwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgJycnCiAgICAgICAgZGl2LGRpdl9lbmQgPSBtYWtlSFRNTFRhZ3MoImRpdiIpCiAgICAgICAgZGl2X2dyaWQgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQ2xhc3MoImdyaWQiKSkKCiAgICAgICAgZ3JpZF9leHByID0gZGl2X2dyaWQgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBncmlkX2hlYWRlciBpbiBncmlkX2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChncmlkX2hlYWRlci5ib2R5KQoKICAgICAgICBkaXZfYW55X3R5cGUgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQ2xhc3Mod2l0aEF0dHJpYnV0ZS5BTllfVkFMVUUpKQogICAgICAgIGRpdl9leHByID0gZGl2X2FueV90eXBlICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZGl2X2hlYWRlciBpbiBkaXZfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAgICAgIHByaW50KGRpdl9oZWFkZXIuYm9keSkKCiAgICBwcmludHM6OgoKICAgICAgICAxIDQgMCAxIDAKCiAgICAgICAgMSA0IDAgMSAwCiAgICAgICAgMSwzIDIsMyAxLDEKICAgIHoIJXM6Y2xhc3PaBWNsYXNzKQFyeQAAACkDWgljbGFzc25hbWXaCW5hbWVzcGFjZVoJY2xhc3NhdHRychEAAAByEQAAAHISAAAAcn8AAAAaFwAAcwQAAAAAIxAB+gEocrwCAABjBAAAAAAAAAAAAAAAEgAAAAcAAABDAAAAc6wCAABHAGQBZAKEAGQCdACDA30EdAGDAH0FfAB8AnwFFwB8AxcAQgB9BnQCfAGDAUQAkAJdblwCfQd9CHwIZAMXAGQEZAWFAhkAXAR9CX0KfQt9DHwKZAZrAHJgZAd8CRYAbgZkCHwJFgB9DXwKZAZrAnKUfAlkBGsIc4R0A3wJgwFkCWsDcox0BGQKgwGCAXwJXAJ9Dn0PdAGDAKAFfA2hAX0QfAt0BmoHawKQAXJwfApkC2sCctJ8BHwGfAkXAIMBdAh8BnQJfAmDARcAgwEXAH0Rbpx8CmQJawKQAXIqfAlkBGsJkAFyDHwEfAZ8CRcAfAYXAIMBdAh8BnQJfAl8BhcAgwEXAIMBFwB9EW4cfAR8BnwGFwCDAXQIfAZ0CXwGgwEXAIMBFwB9EW5EfApkBmsCkAFyZnwEfAZ8DhcAfAYXAHwPFwB8BhcAgwF0CHwGfA4XAHwGFwB8DxcAfAYXAIMBFwB9EW4IdARkDIMBggFu7HwLdAZqCmsCkAJyVHwKZAtrApABcrZ0C3wJdAyDApABc5p0DHwJgwF9CXwEfAlqDXwQFwCDAXQIfAl8EBcAgwEXAH0Rbpx8CmQJawKQAnIOfAlkBGsJkAFy8HwEfAZ8CRcAfBAXAIMBdAh8BnQJfAl8EBcAgwEXAIMBFwB9EW4cfAR8BnwQFwCDAXQIfAZ0CXwQgwEXAIMBFwB9EW5EfApkBmsCkAJySnwEfAZ8DhcAfBAXAHwPFwB8EBcAgwF0CHwGfA4XAHwQFwB8DxcAfBAXAIMBFwB9EW4IdARkDIMBggFuCHQEZA2DAYIBfAyQAnKIdAt8DHQOdA9mAoMCkAJyfnwRahB8DI4AAQBuCnwRoBB8DKEBAQB8EHwRoAV8DaEBfAZCAEsAfRB8EH0GcS58BXwGSwB9BXwFUwApDmFsCgAASGVscGVyIG1ldGhvZCBmb3IgY29uc3RydWN0aW5nIGdyYW1tYXJzIG9mIGV4cHJlc3Npb25zIG1hZGUgdXAgb2YKICAgIG9wZXJhdG9ycyB3b3JraW5nIGluIGEgcHJlY2VkZW5jZSBoaWVyYXJjaHkuICBPcGVyYXRvcnMgbWF5IGJlIHVuYXJ5CiAgICBvciBiaW5hcnksIGxlZnQtIG9yIHJpZ2h0LWFzc29jaWF0aXZlLiAgUGFyc2UgYWN0aW9ucyBjYW4gYWxzbyBiZQogICAgYXR0YWNoZWQgdG8gb3BlcmF0b3IgZXhwcmVzc2lvbnMuIFRoZSBnZW5lcmF0ZWQgcGFyc2VyIHdpbGwgYWxzbwogICAgcmVjb2duaXplIHRoZSB1c2Ugb2YgcGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMKICAgIChzZWUgZXhhbXBsZSBiZWxvdykuCgogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UKICAgIGlzc3VlcyB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZQogICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRgIGZvciBhIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseQogICAgaW1wcm92ZSB5b3VyIHBhcnNlciBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmFzZUV4cHIgLSBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbW9zdCBiYXNpYyBlbGVtZW50IGZvciB0aGUKICAgICAgIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsCiAgICAgICBpbiB0aGUgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtIGBgKG9wRXhwciwKICAgICAgIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pYGAsIHdoZXJlOgoKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOyBtYXkgYWxzbwogICAgICAgICBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOyBpZiBudW1UZXJtcwogICAgICAgICBpcyAzLCBvcEV4cHIgaXMgYSB0dXBsZSBvZiB0d28gZXhwcmVzc2lvbnMsIGZvciB0aGUgdHdvCiAgICAgICAgIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QgYmUgMSwKICAgICAgICAgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcyByaWdodAogICAgICAgICBvciBsZWZ0IGFzc29jaWF0aXZlLCB1c2luZyB0aGUgcHlwYXJzaW5nLWRlZmluZWQgY29uc3RhbnRzCiAgICAgICAgIGBgb3BBc3NvYy5SSUdIVGBgIGFuZCBgYG9wQXNzb2MuTEVGVGBgLgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICBleHByZXNzaW9ucyBtYXRjaGluZyB0aGlzIG9wZXJhdG9yIGV4cHJlc3Npb24gKHRoZSBwYXJzZSBhY3Rpb24KICAgICAgICAgdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKTsgaWYgdGhlIHBhcnNlIGFjdGlvbiBpcyBwYXNzZWQKICAgICAgICAgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKICAgICAgICAgYGBzZXRQYXJzZUFjdGlvbigqZm4pYGAKICAgICAgICAgKDpjbGFzczpgUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbmApCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcwogICAgICAgKGRlZmF1bHQ9IGBgU3VwcHJlc3MoJygnKWBgKQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzCiAgICAgICAoZGVmYXVsdD0gYGBTdXBwcmVzcygnKScpYGApCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQKICAgICAgICAjIHZhcmlhYmxlIG5hbWVzCiAgICAgICAgaW50ZWdlciA9IHB5cGFyc2luZ19jb21tb24uc2lnbmVkX2ludGVnZXIKICAgICAgICB2YXJuYW1lID0gcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgICAgIGFyaXRoX2V4cHIgPSBpbmZpeE5vdGF0aW9uKGludGVnZXIgfCB2YXJuYW1lLAogICAgICAgICAgICBbCiAgICAgICAgICAgICgnLScsIDEsIG9wQXNzb2MuUklHSFQpLAogICAgICAgICAgICAob25lT2YoJyogLycpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICAob25lT2YoJysgLScpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICBdKQoKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAoNSszKSo2CiAgICAgICAgICAgIC0yLS0xMQogICAgICAgICAgICAnJycsIGZ1bGxEdW1wPUZhbHNlKQoKICAgIHByaW50czo6CgogICAgICAgIDUrMyo2CiAgICAgICAgW1s1LCAnKycsIFszLCAnKicsIDZdXV0KCiAgICAgICAgKDUrMykqNgogICAgICAgIFtbWzUsICcrJywgM10sICcqJywgNl1dCgogICAgICAgIC0yLS0xMQogICAgICAgIFtbWyctJywgMl0sICctJywgWyctJywgMTFdXV0KICAgIGMAAAAAAAAAAAAAAAAAAAAAAwAAAEAAAABzFgAAAGUAWgFk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Y2hhcmFjdGVyIGZvciBhIG5lc3RlZCBsaXN0CiAgICAgICAoZGVmYXVsdD0gYGAiKSJgYCk7IGNhbiBhbHNvIGJlIGEgcHlwYXJzaW5nIGV4cHJlc3Npb24KICAgICAtIGNvbnRlbnQgLSBleHByZXNzaW9uIGZvciBpdGVtcyB3aXRoaW4gdGhlIG5lc3RlZCBsaXN0cwogICAgICAgKGRlZmF1bHQ9IGBgTm9uZWBgKQogICAgIC0gaWdub3JlRXhwciAtIGV4cHJlc3Npb24gZm9yIGlnbm9yaW5nIG9wZW5pbmcgYW5kIGNsb3NpbmcKICAgICAgIGRlbGltaXRlcnMgKGRlZmF1bHQ9IDpjbGFzczpgcXVvdGVkU3RyaW5nYCkKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZQogICAgbmVzdGVkIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50CiAgICBiZXR3ZWVuIGRlbGltaXRlcnMgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIGBgaWdub3JlRXhwcmBgIGFyZ3VtZW50IHRvIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IG1heQogICAgY29udGFpbiBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcwogICAgb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgZm9yIG5lc3RpbmcsIHN1Y2ggYXMgcXVvdGVkU3RyaW5nIG9yCiAgICBhIGNvbW1lbnQgZXhwcmVzc2lvbi4gIFNwZWNpZnkgbXVsdGlwbGUgZXhwcmVzc2lvbnMgdXNpbmcgYW4KICAgIDpjbGFzczpgT3JgIG9yIDpjbGFzczpgTWF0Y2hGaXJzdGAuIFRoZSBkZWZhdWx0IGlzCiAgICA6Y2xhc3M6YHF1b3RlZFN0cmluZ2AsIGJ1dCBpZiBubyBleHByZXNzaW9ucyBhcmUgdG8gYmUgaWdub3JlZCwgdGhlbgogICAgcGFzcyBgYE5vbmVgYCBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV90eXBlID0gb25lT2YoInZvaWQgaW50IHNob3J0IGxvbmcgY2hhciBmbG9hdCBkb3VibGUiKQogICAgICAgIGRlY2xfZGF0YV90eXBlID0gQ29tYmluZShkYXRhX3R5cGUgKyBPcHRpb25hbChXb3JkKCcqJykpKQogICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMrJ18nLCBhbHBoYW51bXMrJ18nKQogICAgICAgIG51bWJlciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyCiAgICAgICAgYXJnID0gR3JvdXAoZGVjbF9kYXRhX3R5cGUgKyBpZGVudCkKICAgICAgICBMUEFSLCBSUEFSID0gbWFwKFN1cHByZXNzLCAiKCkiKQoKICAgICAgICBjb2RlX2JvZHkgPSBuZXN0ZWRFeHByKCd7JywgJ30nLCBpZ25vcmVFeHByPShxdW90ZWRTdHJpbmcgfCBjU3R5bGVDb21tZW50KSkKCiAgICAgICAgY19mdW5jdGlvbiA9IChkZWNsX2RhdGFfdHlwZSgidHlwZSIpCiAgICAgICAgICAgICAgICAgICAgICArIGlkZW50KCJuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICsgTFBBUiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoYXJnKSwgW10pKCJhcmdzIikgKyBSUEFSCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCgogICAgICAgIHNvdXJjZV9jb2RlID0gJycnCiAgICAgICAgICAgIGludCBpc19vZGQoaW50IHgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW50IGRlY190b19oZXgoY2hhciBoY2hhcikgewogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9yZChoY2hhciktb3JkKCcwJykpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEwK29yZChoY2hhciktb3JkKCdBJykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgJycnCiAgICAgICAgZm9yIGZ1bmMgaW4gY19mdW5jdGlvbi5zZWFyY2hTdHJpbmcoc291cmNlX2NvZGUpOgogICAgICAgICAgICBwcmludCgiJShuYW1lKXMgKCUodHlwZSlzKSBhcmdzOiAlKGFyZ3MpcyIgJSBmdW5jKQoKCiAgICBwcmludHM6OgoKICAgICAgICBpc19vZGQgKGludCkgYXJnczogW1snaW50JywgJ3gnXV0KICAgICAgICBkZWNfdG9faGV4IChpbnQpIGFyZ3M6IFtbJ2NoYXInLCAnaGNoYXInXV0KICAgIHoub3BlbmluZyBhbmQgY2xvc2luZyBzdHJpbmdzIGNhbm5vdCBiZSB0aGUgc2FtZU5yoAAAAHI1AwAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMAcvsAAACpAXLQAAAAcowAAAByEQAAAHIRAAAAchIAAAByjgAAABsYAAByjwAAAHocbmVzdGVkRXhwci48bG9jYWxzPi48bGFtYmRhPmMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTAHL7AAAAcl4DAAByjAAAAHIRAAAAchEAAAByEgAAAHKOAAAAIBgAAHKPAAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMAcvsAAAByXgMAAHKMAAAAchEAAAByEQAAAHISAAAAco4AAAAnGAAAco8AAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQCgAKEAUwBy+wAAAHJeAwAAcowAAAByEQAAAHIRAAAAchIAAAByjgAAACwYAAByjwAAAHpPb3BlbmluZyBhbmQgY2xvc2luZyBhcmd1bWVudHMgbXVzdCBiZSBzdHJpbmdzIGlmIG5vIGNvbnRlbnQgZXhwcmVzc2lvbiBpcyBnaXZlbnoWbmVzdGVkICVzJXMgZXhwcmVzc2lvbikScjUCAABykAAAAHIQAQAAcskAAAByHAAAAHIsAAAAchsAAAByNwAAAHKmAQAAcpcAAAByVwAAAHJJAQAAcicAAAByIQAAAHIjAAAAcj4AAAByRQAAAHLFAQAAKQVaBm9wZW5lcloGY2xvc2VyWgdjb250ZW50cg4DAABymgAAAHIRAAAAchEAAAByEgAAAHJkAAAAzxcAAHNgAAAAAEEIAQgBCgEYARgBCAEIAQQBAv8CAgT+AgIC/gT/CAUG+wYHCgEC/wICBP4GAwb9CAUIAQgBCP8CAgj+AgMM/QgEBvwGBgwBCP8CAgz+CAMG/QYFCAEGAQoBKgIkARIBYwMAAAAAAAAAAAAAAAsAAAAGAAAAAwAAAHMUAQAAiAFkAWQBhQIZAIkAhwCHAWYCZAJkA4QIiQKHAWYBZARkBYQIfQOHAWYBZAZkB4QIfQSHAWYBZAhkCYQIfQV0AHQBgwCgAmQKoQGgA6EAgwF9BnQEgwB0BIMAoAV8BKEBFwCgBmQLoQF9B3QEgwCgBXwDoQGgBmQMoQF9CHQEgwCgBXwFoQGgBmQNoQF9CXwCcsB0B3QIfAaDAXwHFwB0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwB8CRcAgwF9Cm4odAd0CHwGgwF0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwB8CRcAgwF9CnwKoAmHAmYBZA5kD4QIoQEBAHwAoAp0C3QBgwAXAKEBAQB8CqAGZBChAVMAKRFh5ggAAEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIHNwYWNlLWRlbGltaXRlZCBpbmRlbnRhdGlvbiBibG9ja3MsCiAgICBzdWNoIGFzIHRob3NlIHVzZWQgdG8gZGVmaW5lIGJsb2NrIHN0YXRlbWVudHMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLgoKICAgIFBhcmFtZXRlcnM6CgogICAgIC0gYmxvY2tTdGF0ZW1lbnRFeHByIC0gZXhwcmVzc2lvbiBkZWZpbmluZyBzeW50YXggb2Ygc3RhdGVtZW50IHRoYXQKICAgICAgIGlzIHJlcGVhdGVkIHdpdGhpbiB0aGUgaW5kZW50ZWQgYmxvY2sKICAgICAtIGluZGVudFN0YWNrIC0gbGlzdCBjcmVhdGVkIGJ5IGNhbGxlciB0byBtYW5hZ2UgaW5kZW50YXRpb24gc3RhY2sKICAgICAgIChtdWx0aXBsZSBzdGF0ZW1lbnRXaXRoSW5kZW50ZWRCbG9jayBleHByZXNzaW9ucyB3aXRoaW4gYSBzaW5nbGUKICAgICAgIGdyYW1tYXIgc2hvdWxkIHNoYXJlIGEgY29tbW9uIGluZGVudFN0YWNrKQogICAgIC0gaW5kZW50IC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZCBiZXlvbmQKICAgICAgIHRoZSBjdXJyZW50IGxldmVsOyBzZXQgdG8gRmFsc2UgZm9yIGJsb2NrIG9mIGxlZnQtbW9zdAogICAgICAgc3RhdGVtZW50cyAoZGVmYXVsdD0gYGBUcnVlYGApCgogICAgQSB2YWxpZCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGBgYmxvY2tTdGF0ZW1lbnRgYC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YSA9ICcnJwogICAgICAgIGRlZiBBKHopOgogICAgICAgICAgQTEKICAgICAgICAgIEIgPSAxMDAKICAgICAgICAgIEcgPSBBMgogICAgICAgICAgQTIKICAgICAgICAgIEEzCiAgICAgICAgQgogICAgICAgIGRlZiBCQihhLGIsYyk6CiAgICAgICAgICBCQjEKICAgICAgICAgIGRlZiBCQkEoKToKICAgICAgICAgICAgYmJhMQogICAgICAgICAgICBiYmEyCiAgICAgICAgICAgIGJiYTMKICAgICAgICBDCiAgICAgICAgRAogICAgICAgIGRlZiBzcGFtKHgseSk6CiAgICAgICAgICAgICBkZWYgZWdncyh6KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgJycnCgoKICAgICAgICBpbmRlbnRTdGFjayA9IFsxXQogICAgICAgIHN0bXQgPSBGb3J3YXJkKCkKCiAgICAgICAgaWRlbnRpZmllciA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgZnVuY0RlY2wgPSAoImRlZiIgKyBpZGVudGlmaWVyICsgR3JvdXAoIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSkgKyAiKSIpICsgIjoiKQogICAgICAgIGZ1bmNfYm9keSA9IGluZGVudGVkQmxvY2soc3RtdCwgaW5kZW50U3RhY2spCiAgICAgICAgZnVuY0RlZiA9IEdyb3VwKGZ1bmNEZWNsICsgZnVuY19ib2R5KQoKICAgICAgICBydmFsdWUgPSBGb3J3YXJkKCkKICAgICAgICBmdW5jQ2FsbCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHJ2YWx1ZSkpICsgIikiKQogICAgICAgIHJ2YWx1ZSA8PCAoZnVuY0NhbGwgfCBpZGVudGlmaWVyIHwgV29yZChudW1zKSkKICAgICAgICBhc3NpZ25tZW50ID0gR3JvdXAoaWRlbnRpZmllciArICI9IiArIHJ2YWx1ZSkKICAgICAgICBzdG10IDw8IChmdW5jRGVmIHwgYXNzaWdubWVudCB8IGlkZW50aWZpZXIpCgogICAgICAgIG1vZHVsZV9ib2R5ID0gT25lT3JNb3JlKHN0bXQpCgogICAgICAgIHBhcnNlVHJlZSA9IG1vZHVsZV9ib2R5LnBhcnNlU3RyaW5nKGRhdGEpCiAgICAgICAgcGFyc2VUcmVlLnBwcmludCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgW1snZGVmJywKICAgICAgICAgICdBJywKICAgICAgICAgIFsnKCcsICd6JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0ExJ10sIFtbJ0InLCAnPScsICcxMDAnXV0sIFtbJ0cnLCAnPScsICdBMiddXSwgWydBMiddLCBbJ0EzJ11dXSwKICAgICAgICAgJ0InLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnQkInLAogICAgICAgICAgWycoJywgJ2EnLCAnYicsICdjJywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0JCMSddLCBbWydkZWYnLCAnQkJBJywgWycoJywgJyknXSwgJzonLCBbWydiYmExJ10sIFsnYmJhMiddLCBbJ2JiYTMnXV1dXV1dLAogICAgICAgICAnQycs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ZSllBGQ6ZAqEAIMBgwFaPWUpZQRkO2QKhACDAYMBWj5kPFMAKT9yggAAAGEfCwAASGVyZSBhcmUgc29tZSBjb21tb24gbG93LWxldmVsIGV4cHJlc3Npb25zIHRoYXQgbWF5IGJlIHVzZWZ1bCBpbgogICAganVtcC1zdGFydGluZyBwYXJzZXIgZGV2ZWxvcG1lbnQ6CgogICAgIC0gbnVtZXJpYyBmb3JtcyAoOmNsYXNzOmBpbnRlZ2VyczxpbnRlZ2VyPmAsIDpjbGFzczpgcmVhbHM8cmVhbD5gLAogICAgICAgOmNsYXNzOmBzY2llbnRpZmljIG5vdGF0aW9uPHNjaV9yZWFsPmApCiAgICAgLSBjb21tb24gOmNsYXNzOmBwcm9ncmFtbWluZyBpZGVudGlmaWVyczxpZGVudGlmaWVyPmAKICAgICAtIG5ldHdvcmsgYWRkcmVzc2VzICg6Y2xhc3M6YE1BQzxtYWNfYWRkcmVzcz5gLAogICAgICAgOmNsYXNzOmBJUHY0PGlwdjRfYWRkcmVzcz5gLCA6Y2xhc3M6YElQdjY8aXB2Nl9hZGRyZXNzPmApCiAgICAgLSBJU084NjAxIDpjbGFzczpgZGF0ZXM8aXNvODYwMV9kYXRlPmAgYW5kCiAgICAgICA6Y2xhc3M6YGRhdGV0aW1lPGlzbzg2MDFfZGF0ZXRpbWU+YAogICAgIC0gOmNsYXNzOmBVVUlEPHV1aWQ+YAogICAgIC0gOmNsYXNzOmBjb21tYS1zZXBhcmF0ZWQgbGlzdDxjb21tYV9zZXBhcmF0ZWRfbGlzdD5gCgogICAgUGFyc2UgYWN0aW9uczoKCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0ludGVnZXJgCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0Zsb2F0YAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9EYXRlYAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9EYXRldGltZWAKICAgICAtIDpjbGFzczpgc3RyaXBIVE1MVGFnc2AKICAgICAtIDpjbGFzczpgdXBjYXNlVG9rZW5zYAogICAgIC0gOmNsYXNzOmBkb3duY2FzZVRva2Vuc2AKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZudW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmhleF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBGRgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZnJhY3Rpb24ucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5taXhlZF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgICAgICAxCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgIDEtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgaW1wb3J0IHV1aWQKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAodXVpZC5VVUlEKSkKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdXVpZAogICAgICAgICAgICAxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgKICAgICAgICAgICAgJycnKQoKICAgIHByaW50czo6CgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgIDEwMAogICAgICAgIFsyNTZdCgogICAgICAgIEZGCiAgICAgICAgWzI1NV0KCiAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgIDEKICAgICAgICBbMV0KCiAgICAgICAgMS8y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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 16
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
appdirs.cpython-38.opt-1.pyc
19.96 KB
lrw-r--r--
2023-10-17 18:30:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
appdirs.cpython-38.pyc
19.96 KB
lrw-r--r--
2023-10-17 18:30:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-38.opt-1.pyc
15.13 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-38.pyc
15.13 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-38.opt-1.pyc
35.62 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-38.pyc
35.68 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-38.opt-1.pyc
63.13 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-38.pyc
63.26 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-38.opt-1.pyc
226.81 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-38.pyc
226.81 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-38.opt-1.pyc
7.82 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-38.pyc
7.82 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-38.opt-1.pyc
25.78 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-38.pyc
25.78 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-1.pyc
2.76 KB
lrw-r--r--
2023-10-17 18:30:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.pyc
2.76 KB
lrw-r--r--
2023-10-17 18:30:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).