REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 194.14 KB
Close
/opt/alt/python310/lib/python3.10/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-310.pyc
Text
Base64
bw0NCgAAAABYEGFpeIoDAOMAAAAAAAAAAAAAAAAAAAAACwAAAEAAAABz1AoAAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAHoIZARkCGwSbRNaEwEAVwBuDwQAZRR5UwEAAQABAGQEZAhsFW0TWhMBAFkAbgF3AHoOZARkCWwWbRdaFwEAZARkCmwWbRhaGAEAVwBuFQQAZRR5dwEAAQABAGQEZAlsDW0XWhcBAGQEZApsDW0YWhgBAFkAbgF3AHoIZARkC2wNbRlaGgEAVwBuHQQAZRR5nQEAAQABAHoIZARkC2wbbRlaGgEAVwBuCwQAZRR5mgEAAQABAGQFWhpZAG4BdwBZAG4BdwBnAGQMogFaHGUdZQlqHoMBZAVkDYUCGQBaH2UfZAQZAGQNawJaIGUgcsplCWohWiJlI1okZSVaJmUjWidlKGUpZSplK2UsZR1lLWUuZS9lMGUxZwtaMm4pZQlqM1oiZTRaNWQOZA+EAFonZwBaMmQEZAVsNlo2ZBCgN6EARABdFVo4egplMqA5ZTplNmU4gwKhAQEAVwBx3QQAZTt58gEAAQABAFkAcd13AGU8ZBFkEoQAZTVkE4MBRACDAYMBWj1kFGQVhABaPkcAZBZkF4QAZBdlP4MDWkBlBGpBZQRqQhcAWkNkGFpEZURkGRcAWkVlQ2VEFwBaRmUlZBqDAVpHZBugSGQcZBKEAGUEaklEAIMBoQFaSkcAZB1kHoQAZB5lS4MDWkxHAGQfZCCEAGQgZUyDA1pNRwBkIWQihABkImVMgwNaTkcAZCNkJIQAZCRlToMDWk9HAGQlZCaEAGQmZUuDA1pQRwBkJ2QohABkKGU/gwNaUUcAZClkKoQAZCplP4MDWlJlGKBTZVKhAQEAZCtkLIQAWlRkLWQuhABaVWQvZDCEAFpWZDFkMoQAWldkM2Q0hABaWGQ1ZDaEAFpZZDdkOIQAWloJAJABZBdkOmQ7hAFaW0cAZDxkPYQAZD1lP4MDWlxHAGQ+ZD+EAGQ/ZVyDA1pdRwBkQGRBhABkQWVdgwNaXkcAZEJkQ4QAZENlXYMDWl9HAGREZEWEAGRFZV2DA1pgZWBaYWVgZVxfYkcAZEZkR4QAZEdlXYMDWmNHAGRIZEmEAGRJZWCDA1pkRwBkSmRLhABkS2VjgwNaZUcAZExkTYQAZE1lXYMDWmZHAGROZE+EAGRPZV2DA1pnRwBkUGRRhABkUWVdgwNaaEcAZFJkU4QAZFNlXYMDWmlHAGRUZFWEAGRVZV2DA1pqRwBkVmRXhABkV2VdgwNaa0cAZFhkWYQAZFllXYMDWmxHAGRaZFuEAGRbZWyDA1ptRwBkXGRdhABkXWVsgwNabkcAZF5kX4QAZF9lbIMDWm9HAGRgZGGEAGRhZWyDA1pwRwBkYmRjhABkY2VsgwNacUcAZGRkZYQAZGVlbIMDWnJHAGRmZGeEAGRnZWyDA1pzRwBkaGRphABkaWVcgwNadEcAZGpka4QAZGtldIMDWnVHAGRsZG2EAGRtZXSDA1p2RwBkbmRvhABkb2V0gwNad0cAZHBkcYQAZHFldIMDWnhHAGRyZHOEAGRzZVyDA1p5RwBkdGR1hABkdWV5gwNaekcAZHZkd4QAZHdleYMDWntHAGR4ZHmEAGR5ZXmDA1p8RwBkemR7hABke2V8gwNafUcAZHxkfYQAZH1lfIMDWn5HAGR+ZH+EAGR/ZT+DA1p/ZX+DAFqARwBkgGSBhABkgWV5gwNagUcAZIJkg4QAZINleYMDWoJHAGSEZIWEAGSFZXmDA1qDRwBkhmSHhABkh2WDgwNahEcAZIhkiYQAZIlleYMDWoVHAGSKZIuEAGSLZYWDA1qGRwBkjGSNhABkjWWFgwNah0cAZI5kj4QAZI9lhYMDWohHAGSQZJGEAGSRZYWDA1qJRwBkkmSThABkk2U/gwNaimSUZJWEAFqLkAFkGGSYZJmEAVqMkAFkGWSaZJuEAVqNZJxknYQAWo5knmSfhABaj2SgZKGEAFqQZKJko4QAWpGQAWQaZKVkpoQBWpJkp2SohABak5ABZBtkqWSqhAFalGSrZKyEAFqVZK1kroQAWpZlXoMAoJdkr6EBWphlboMAoJdksKEBWpllb4MAoJdksaEBWpplcIMAoJdksqEBWptlcYMAoJdks6EBWpxlZ2VHZLRkOWS1jQOgnWS2ZLeEAKEBWp5laGS4gwGgnWS5ZLeEAKEBWp9laGS6gwGgnWS7ZLeEAKEBWqBlnmWfQgBloEIAZWpkvGQT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cmUgYXV0by1jb252ZXJ0ZWQgdG8KTHtMaXRlcmFsfSBleHByZXNzaW9ucyk6OgoKICAgIGZyb20gcHlwYXJzaW5nIGltcG9ydCBXb3JkLCBhbHBoYXMKCiAgICAjIGRlZmluZSBncmFtbWFyIG9mIGEgZ3JlZXRpbmcKICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCgogICAgaGVsbG8gPSAiSGVsbG8sIFdvcmxkISIKICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKVGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgZm9sbG93aW5nOjoKCiAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KClRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYW1tYXIgaXMgcXVpdGUgcmVhZGFibGUsIG93aW5nIHRvIHRoZSBzZWxmLWV4cGxhbmF0b3J5CmNsYXNzIG5hbWVzLCBhbmQgdGhlIHVzZSBvZiAnKycsICd8JyBhbmQgJ14nIG9wZXJhdG9ycy4KClRoZSBMe1BhcnNlUmVzdWx0c30gb2JqZWN0IHJldHVybmVkIGZyb20gTHtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+fSBjYW4gYmUgYWNjZXNzZWQgYXMgYSBuZXN0ZWQgbGlzdCwgYSBkaWN0aW9uYXJ5LCBvciBhbgpvYmplY3Qgd2l0aCBuYW1lZCBhdHRyaWJ1dGVzLgoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaGFuZGxlcyBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgdmV4aW5nIHdoZW4gd3JpdGluZyB0ZXh0IHBhcnNlcnM6CiAtIGV4dHJhIG9yIG1pc3Npbmcgd2hpdGVzcGFjZSAodGhlIGFib3ZlIHByb2dyYW0gd2lsbCBhbHNvIGhhbmRsZSAiSGVsbG8sV29ybGQhIiwgIkhlbGxvICAsICBXb3JsZCAgISIsIGV0Yy4pCiAtIHF1b3RlZCBzdHJpbmdzCiAtIGVtYmVkZGVkIGNvbW1lbnRzCgoKR2V0dGluZyBTdGFydGVkIC0KLS0tLS0tLS0tLS0tLS0tLS0KVmlzaXQgdGhlIGNsYXNzZXMgTHtQYXJzZXJFbGVtZW50fSBhbmQgTHtQYXJzZVJlc3VsdHN9IHRvIHNlZSB0aGUgYmFzZSBjbGFzc2VzIHRoYXQgbW9zdCBvdGhlciBweXBhcnNpbmcKY2xhc3NlcyBpbmhlcml0IGZyb20uIFVzZSB0aGUgZG9jc3RyaW5ncyBmb3IgZXhhbXBsZXMgb2YgaG93IHRvOgogLSBjb25zdHJ1Y3QgbGl0ZXJhbCBtYXRjaCBleHByZXNzaW9ucyBmcm9tIEx7TGl0ZXJhbH0gYW5kIEx7Q2FzZWxlc3NMaXRlcmFsfSBjbGFzc2VzCiAtIGNvbnN0cnVjdCBjaGFyYWN0ZXIgd29yZC1ncm91cCBleHByZXNzaW9ucyB1c2luZyB0aGUgTHtXb3JkfSBjbGFzcwogLSBzZWUgaG93IHRvIGNyZWF0ZSByZXBldGl0aXZlIGV4cHJlc3Npb25zIHVzaW5nIEx7WmVyb09yTW9yZX0gYW5kIEx7T25lT3JNb3JlfSBjbGFzc2VzCiAtIHVzZSBMeycrJzxBbmQ+fSwgTHsnfCc8TWF0Y2hGaXJzdD59LCBMeydeJzxPcj59LCBhbmQgTHsnJic8RWFjaD59IG9wZXJhdG9ycyB0byBjb21iaW5lIHNpbXBsZSBleHByZXNzaW9ucyBpbnRvIG1vcmUgY29tcGxleCBvbmVzCiAtIGFzc29jaWF0ZSBuYW1lcyB3aXRoIHlvdXIgcGFyc2VkIHJlc3VsdHMgdXNpbmcgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfQogLSBmaW5kIHNvbWUgaGVscGZ1bCBleHByZXNzaW9uIHNob3J0LWN1dHMgbGlrZSBMe2RlbGltaXRlZExpc3R9IGFuZCBMe29uZU9mfQogLSBmaW5kIG1vcmUgdXNlZnVsIGNvbW1vbiBleHByZXNzaW9ucyBpbiB0aGUgTHtweXBhcnNpbmdfY29tbW9ufSBuYW1lc3BhY2UgY2xhc3MKegUyLjIuMXoVMTggU2VwIDIwMTggMDA6NDkgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaBVJMb2NrKQHaCEl0ZXJhYmxlKQHaDk11dGFibGVNYXBwaW5nKQHaC09yZGVyZWREaWN0KWnaA0FuZNoPQ2FzZWxlc3NLZXl3b3Jk2g9DYXNlbGVzc0xpdGVyYWzaCkNoYXJzTm90SW7aB0NvbWJpbmXaBERpY3TaBEVhY2jaBUVtcHR52gpGb2xsb3dlZEJ52gdGb3J3YXJk2gpHb1RvQ29sdW1u2gVHcm91cNoHS2V5d29yZNoHTGluZUVuZNoJTGluZVN0YXJ02gdMaXRlcmFs2gpNYXRjaEZpcnN02gdOb01hdGNo2gZOb3RBbnnaCU9uZU9yTW9yZdoIT25seU9uY2XaCE9wdGlvbmFs2gJPctoSUGFyc2VCYXNlRXhjZXB0aW9u2hNQYXJzZUVsZW1lbnRFbmhhbmNl2g5QYXJzZUV4Y2VwdGlvbtoPUGFyc2VFeHByZXNzaW9u2hNQYXJzZUZhdGFsRXhjZXB0aW9u2gxQYXJzZVJlc3VsdHPaFFBhcnNlU3ludGF4RXhjZXB0aW9u2g1QYXJzZXJFbGVtZW502gxRdW90ZWRTdHJpbmfaGVJlY3Vyc2l2ZUdyYW1tYXJFeGNlcHRpb27aBVJlZ2V42gZTa2lwVG/aCVN0cmluZ0VuZNoLU3RyaW5nU3RhcnTaCFN1cHByZXNz2gVUb2tlbtoOVG9rZW5Db252ZXJ0ZXLaBVdoaXRl2gRXb3Jk2gdXb3JkRW5k2glXb3JkU3RhcnTaClplcm9Pck1vcmXaCWFscGhhbnVtc9oGYWxwaGFz2gphbHBoYXM4Yml02gthbnlDbG9zZVRhZ9oKYW55T3BlblRhZ9oNY1N0eWxlQ29tbWVudNoDY29s2hJjb21tYVNlcGFyYXRlZExpc3TaEGNvbW1vbkhUTUxFbnRpdHnaDGNvdW50ZWRBcnJhedoPY3BwU3R5bGVDb21tZW502g9kYmxRdW90ZWRTdHJpbmfaD2RibFNsYXNoQ29tbWVudNoNZGVsaW1pdGVkTGlzdNoGZGljdE9m2g5kb3duY2FzZVRva2Vuc9oFZW1wdHnaB2hleG51bXPaC2h0bWxDb21tZW502hBqYXZhU3R5bGVDb21tZW502gRsaW5l2gdsaW5lRW5k2glsaW5lU3RhcnTaBmxpbmVub9oMbWFrZUhUTUxUYWdz2gttYWtlWE1MVGFnc9oObWF0Y2hPbmx5QXRDb2zaEW1hdGNoUHJldmlvdXNFeHBy2hRtYXRjaFByZXZpb3VzTGl0ZXJhbNoKbmVzdGVkRXhwctoPbnVsbERlYnVnQWN0aW9u2gRudW1z2gVvbmVPZtoHb3BBc3NvY9oSb3BlcmF0b3JQcmVjZWRlbmNl2gpwcmludGFibGVz2ghwdW5jOGJpdNoScHl0aG9uU3R5bGVDb21tZW502gxxdW90ZWRTdHJpbmfaDHJlbW92ZVF1b3Rlc9oRcmVwbGFjZUhUTUxFbnRpdHnaC3JlcGxhY2VXaXRo2gpyZXN0T2ZMaW5l2g9zZ2xRdW90ZWRTdHJpbmfaBnNyYW5nZdoJc3RyaW5nRW5k2gtzdHJpbmdTdGFydNoQdHJhY2VQYXJzZUFjdGlvbtoNdW5pY29kZVN0cmluZ9oMdXBjYXNlVG9rZW5z2g13aXRoQXR0cmlidXRl2g1pbmRlbnRlZEJsb2Nr2g9vcmlnaW5hbFRleHRGb3LaB3VuZ3JvdXDaDWluZml4Tm90YXRpb27aC2xvY2F0ZWRFeHBy2gl3aXRoQ2xhc3PaCkNsb3NlTWF0Y2jaCHRva2VuTWFw2hBweXBhcnNpbmdfY29tbW9u6QMAAABjAQAAAAAAAAAAAAAAAwAAAAgAAABDAAAAc2AAAAB0AHwAdAGDAnIHfABTAHoFdAJ8AIMBVwBTAAQAdAN5LwEAAQABAHQBfACDAaAEdAWgBqEAZAGhAn0BdAdkAoMBfQJ8AqAIZANkBIQAoQEBAHwCoAl8AaEBBgBZAFMAdwApBWEVAQAARHJvcC1pbiByZXBsYWNlbWVudCBmb3Igc3RyKG9iaikgdGhhdCB0cmllcyB0byBiZSBVbmljb2RlIGZyaWVuZGx5LiBJdCBmaXJzdCB0cmllcwogICAgICAgICAgIHN0cihvYmopLiBJZiB0aGF0IGZhaWxzIHdpdGggYSBVbmljb2RlRW5jb2RlRXJyb3IsIHRoZW4gaXQgdHJpZXMgdW5pY29kZShvYmopLiBJdAogICAgICAgICAgIHRoZW4gPCByZXR1cm5zIHRoZSB1bmljb2RlIG9iamVjdCB8IGVuY29kZXMg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AAAAAAAAAAAABQAAAEAAAABzpgEAAGUAWgFkAFoCZAFaA2RbZARkBYQBWgRkAmQCZANkA2UFZgVkBmQHhAFaBmQIZAmEAFoHZQVmAWQKZAuEAVoIZAxkDYQAWglkDmQPhABaCmQQZBGEAFoLZBJkE4QAWgxlDFoNZBRkFYQAWg5kFmQXhABaD2QYZBmEAFoQZBpkG4QAWhFkHGQdhABaEmUTclBlEFoUCQBlEVoVCQBlEloWbhVlEFoXCQBlEVoYCQBlEloZCQBkHmQfhABaFGQgZCGEAFoVZCJkI4QAWhZkJGQlhABaGmQmZCeEAFobZFxkKGQphAFaHGQqZCuEAFodZCxkLYQAWh5kLmQvhABaH2QwZDGEAFogZDJkM4QAWiFkNGQ1hABaImQ2ZDeEAFojZDhkOYQAWiRkOmQ7hABaJWQ8ZD2EAFomZF1kP2RAhAFaJ2RBZEKEAFooZENkRIQAWilkRWRGhABaKmReZEhkSYQBWitkSmRLhABaLGRMZE2EAFotZF9kT2RQhAFaLmRRZFKEAFovZFNkVIQAWjBkVWRWhABaMWRXZFiEAFoyZFlkWoQAWjNkAlMAKWByJAAAAGFJBQAACiAgICBTdHJ1Y3R1cmVkIHBhcnNlIHJlc3VsdHMsIHRvIHByb3ZpZGUgbXVsdGlwbGUgbWVhbnMgb2YgYWNjZXNzIHRvIHRoZSBwYXJzZWQgZGF0YToKICAgICAgIC0gYXMgYSBsaXN0IChDe2xlbihyZXN1bHRzKX0pCiAgICAgICAtIGJ5IGxpc3QgaW5kZXggKEN7cmVzdWx0c1swXSwgcmVzdWx0c1sxXX0sIGV0Yy4pCiAgICAgICAtIGJ5IGF0dHJpYnV0ZSAoQ3tyZXN1bHRzLjxyZXN1bHRzTmFtZT59IC0gc2VlIEx7UGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBkYXRlX3N0ciA9IChpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJ5ZWFyIikgKyAnLycgCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJkYXkiKSkKICAgICAgICAjIGVxdWl2YWxlbnQgZm9ybToKICAgICAgICAjIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICMgcGFyc2VTdHJpbmcgcmV0dXJucyBhIFBhcnNlUmVzdWx0cyBvYmplY3QKICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpCgogICAgICAgIGRlZiB0ZXN0KHMsIGZuPXJlcHIpOgogICAgICAgICAgICBwcmludCgiJXMgLT4gJXMiICUgKHMsIGZuKGV2YWwocykpKSkKICAgICAgICB0ZXN0KCJsaXN0KHJlc3VsdCkiKQogICAgICAgIHRlc3QoInJlc3VsdFswXSIpCiAgICAgICAgdGVzdCgicmVzdWx0Wydtb250aCddIikKICAgICAgICB0ZXN0KCJyZXN1bHQuZGF5IikKICAgICAgICB0ZXN0KCInbW9udGgnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgiJ21pbnV0ZXMnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgicmVzdWx0LmR1bXAoKSIsIHN0cikKICAgIHByaW50czo6CiAgICAgICAgbGlzdChyZXN1bHQpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIHJlc3VsdFswXSAtPiAnMTk5OScKICAgICAgICByZXN1bHRbJ21vbnRoJ10gLT4gJzEyJwogICAgICAgIHJlc3VsdC5kYXkgLT4gJzMxJwogICAgICAgICdtb250aCcgaW4gcmVzdWx0IC0+IFRydWUKICAgICAgICAnbWludXRlcycgaW4gcmVzdWx0IC0+IEZhbHNlCiAgICAgICAgcmVzdWx0LmR1bXAoKSAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KICAgICAgICAtIGRheTogMzEKICAgICAgICAtIG1vbnRoOiAxMgogICAgICAgIC0geWVhcjog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IHN0cmluZyBjYW4gYmUgZW1iZWRkZWQKICAgICAgICBpbiBhIG5lc3RlZCBkaXNwbGF5IG9mIG90aGVyIGRhdGEuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoJzEyLzMxLzE5OTknKQogICAgICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIFsnMTInLCAnLycsICczMScsICcvJywgJzE5OTknXQogICAgICAgICAgICAtIGRheTogMTk5OQogICAgICAgICAgICAtIG1vbnRoOiAzMQogICAgICAgICAgICAtIHllYXI6IDEyCiAgICAgICAgcl0BAABjAQAAAAAAAAAAAAAAAwAAAAMAAABzAAAAcyAAAACBAHwAXQtcAn0BfQJ0AHwBgwF8AmYCVgABAHECZABTAHKJAAAAKQFyfwAAAHJYAQAAcnkAAAByeQAAAHJ6AAAAcowAAAB+AwAAclkBAAB6JFBhcnNlUmVzdWx0cy5kdW1wLjxsb2NhbHM+LjxnZW5leHByPnoKJXMlcy0gJXM6IHJfAQAAco0AAABjAQAAAAAAAAAAAAAAAgAAAAQAAABzAAAA8xoAAACBAHwAXQh9AXQAfAF0AYMCVgABAHECZABTAHKJAAAAKQJyfQAAAHIkAAAAKQJyigAAANoCdnZyeQAAAHJ5AAAAcnoAAAByjAAAAIoDAADzBAAAAAKAGAB6EQolcyVzWyVkXToKJXMlcyVzcqEAAAApDXI2AQAAcogAAABy5QAAAHIsAQAA2gZzb3J0ZWRyBwEAAHJ9AAAAciQAAADaBGR1bXBy3QAAANoDYW55cggBAAByvgAAACkLcq0AAAByZwEAANoFZGVwdGjaBGZ1bGxyUwEAANoCTkxyBwEAAHL/AAAAcvkAAABy2gAAAHJ1AQAAcnkAAAByeQAAAHJ6AAAAcngBAABnAwAAcy4AAAAEEgQBFgEEAQgBFgEMAQQBCgEYAQoBBAEYARACEAIC9hILBAEQAQoBNAEsAgoCehFQYXJzZVJlc3VsdHMuZHVtcGMBAAAAAAAAAAAAAAADAAAABAAAAE8AAABzIAAAAHQAagB8AKABoQBnAXwBogFSAGkAfAKkAY4BAQBkAVMAKQJh9QIAAAogICAgICAgIFByZXR0eS1wcmludGVyIGZvciBwYXJzZWQgcmVzdWx0cyBhcyBhIGxpc3QsIHVzaW5nIHRoZSBDe3BwcmludH0gbW9kdWxlLgogICAgICAgIEFjY2VwdHMgYWRkaXRpb25hbCBwb3NpdGlvbmFsIG9yIGtleXdvcmQgYXJncyBhcyBkZWZpbmVkIGZvciB0aGUgCiAgICAgICAgQ3twcHJpbnQucHByaW50fSBtZXRob2QuIChVe2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5wcHJpbnR9KQoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgICAgICBudW0gPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGZ1bmMgPSBGb3J3YXJkKCkKICAgICAgICAgICAgdGVybSA9IGlkZW50IHwgbnVtIHwgR3JvdXAoJygnICsgZnVuYyArICcpJykKICAgICAgICAgICAgZnVuYyA8PD0gaWRlbnQgKyBHcm91cChPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKSkKICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5wYXJzZVN0cmluZygiZm5hIGEsYiwoZm5iIGMsZCwyMDApLDEwMCIpCiAgICAgICAgICAgIHJlc3VsdC5wcHJpbnQod2lkdGg9NDApCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgWydmbmEnLAogICAgICAgICAgICAgWydhJywKICAgICAgICAgICAgICAnYicsCiAgICAgICAgICAgICAgWycoJywgJ2ZuYicsIFsnYycsICdkJywgJzIwMCddLCAnKSddLAogICAgICAgICAgICAgICcxMDAn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aG9kcyB0byBtYWludGFpbiBhCiAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywgdGhlIHBhcnNlIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uCiAgIHBvc2l0aW9ucyB3aXRoaW4gdGhlIHBhcnNlZCBzdHJpbmcuCiAgIHIBAAAAco0AAAByXQEAACkCcgMBAADaBXJmaW5kKQNyqAAAANoEc3RyZ3KQAAAAcnkAAAByeQAAAHJ6AAAAcjsAAADIAwAAcwQAAAAECkIBcjsAAABjAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAcxIAAAB8AaAAZAFkAnwAoQNkAxcAUwApBGEHAgAAUmV0dXJucyBjdXJyZW50IGxpbmUgbnVtYmVyIHdpdGhpbiBhIHN0cmluZywgY291bnRpbmcgbmV3bGluZXMgYXMgbGluZSBzZXBhcmF0b3JzLgogICBUaGUgZmlyc3QgbGluZSBpcyBudW1iZXIgMS4KCiAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSBMe0l7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ308UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgIG9uIHBhcnNpbmcgc3RyaW5ncyBjb250YWluaW5nIEN7PFRBQj59cywgYW5kIHN1Z2dlc3RlZCBtZXRob2RzIHRvIG1haW50YWluIGEKICAgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UgbG9jYXRpb24sIGFuZCBsaW5lIGFuZCBjb2x1bW4KICAgcG9zaXRpb25zIHdpdGhpbiB0aGUgcGFyc2VkIHN0cmluZy4KICAgcl0BAAByAQAAAHKNAAAAKQHaBWNvdW50KQJyqAAAAHKHAQAAcnkAAAByeQAAAHJ6AAAAckwAAADVAwAAcwIAAAASCnJMAAAAYwIAAAAAAAAAAAAAAAQAAAAFAAAAQwAAAHNC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F2QYhABaEGQZZBqEAFoRZBtkHIQAWhJkHWQehABaE2SHZB9kIIQBWhRkIWQihABaFWSIZCNkJIQBWhZkJWQmhABaF2QnZCiEAFoYRwBkKWQqhABkKmUZgwNaGmUbZCt1AXJwRwBkLGQthABkLWUZgwNaHG4IRwBkLmQthABkLWUZgwNaHGkAWh1lHoMAWh9kL2QvZwJaIGSIZDBkMYQBWiFlFloiZQZkMmQzhACDAVojZANaJGUGZIlkNWQ2hAGDAVolZIZkN2Q4hAFaJmUnZANmAmQ5ZDqEAVooZDtkPIQAWillJ2YBZD1kPoQBWiplJ2QDZgJkP2RAhAFaK2RBZEKEAFosZENkRIQAWi1kRWRGhABaLmRHZEiEAFovZElkSoQAWjBkS2RMhABaMWRNZE6EAFoyZE9kUIQAWjNkUWRShABaNGRTZFSEAFo1ZFVkVoQAWjZkV2RYhABaN2RZZFqEAFo4ZIpkW2RchAFaOWRdZF6EAFo6ZF9kYIQAWjtkYWRihABaPGRjZGSEAFo9ZGVkZoQAWj5kZ2RohABaP2SHZGlkaoQBWkBka2RshABaQWRtZG6EAFpCZG9kcIQAWkNkcWRyhABaRGcAZgFkc2R0hAFaRWSGZHVkdoQBWkaHAGYBZHdkeIQIWkdkeWR6hABaSGR7ZHyEAFpJZH1kfoQAWkpkf2SAhABaS2SHZIFkgoQBWkxki2SEZIWEAVpNhwAEAFpOUwApjHImAAAAeilBYnN0cmFjdCBiYXNlIGxldmVsIHBhcnNlciBlbGVtZW50IGNsYXNzLnoEIAoJDUZjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAA8woAAAB8AHQAXwFkAVMAKQJh0QEAAAogICAgICAgIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCB3aGl0ZXNwYWNlIGNoYXJzCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICAjIGRlZmF1bHQgd2hpdGVzcGFjZSBjaGFycyBhcmUgc3BhY2UsIDxUQUI+IGFuZCBuZXdsaW5lCiAgICAgICAgICAgIE9uZU9yTW9yZShXb3JkKGFscGhhcykpLnBhcnNlU3RyaW5nKCJhYmMgZGVmXG5naGkgamtsIikgICMgLT4gWydhYmMnLCAnZGVmJywgJ2doaScsICdqa2wnXQogICAgICAgICAgICAKICAgICAgICAgICAgIyBjaGFuZ2UgdG8ganVzdCB0cmVhdCBuZXdsaW5lIGFzIHNpZ25pZmljYW50CiAgICAgICAgICAgIFBhcnNlckVsZW1lbnQuc2V0RGVmYXVsdFdoaXRlc3BhY2VDaGFycygiIFx0IikKICAgICAgICAgICAgT25lT3JNb3JlKFdvcmQoYWxwaGFzKSkucGFyc2VTdHJpbmcoImFiYyBkZWZcbmdoaSBqa2wiKSAgIyAtPiBbJ2FiYycsICdkZWYnXQogICAgICAgIE4pAnImAAAA2hNERUZBVUxUX1dISVRFX0NIQVJTqQHaBWNoYXJzcnkAAAByeQAAAHJ6AAAA2hlzZXREZWZhdWx0V2hpdGVzcGFjZUNoYXJzVAQAAHMCAAAACg16J1BhcnNlckVsZW1lbnQuc2V0RGVmYXVsdFdoaXRlc3BhY2VDaGFyc2MBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABytgEAACkCYYUCAAAKICAgICAgICBTZXQgY2xhc3MgdG8gYmUgdXNlZCBmb3IgaW5jbHVzaW9uIG9mIHN0cmluZyBsaXRlcmFscyBpbnRvIGEgcGFyc2VyLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICAjIGRlZmF1bHQgbGl0ZXJhbCBjbGFzcyB1c2VkIGlzIExpdGVyYWwKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikgICAgICAgICAgIAoKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KCgogICAgICAgICAgICAjIGNoYW5nZSB0byBTdXBwcmVzcwogICAgICAgICAgICBQYXJzZXJFbGVtZW50LmlubGluZUxpdGVyYWxzVXNpbmcoU3VwcHJlc3MpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpICAgICAgICAgICAKCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWycxOTk5JywgJzEyJywgJzMxJ10KICAgICAgICBOKQJyJgAAANoTX2xpdGVyYWxTdHJpbmdDbGFzcykBcrAAAAByeQAAAHJ5AAAAcnoAAADaE2lubGluZUxpdGVyYWxzVXNpbmdjBAAAcwIAAAAKE3ohUGFyc2VyRWxlbWVudC5pbmxpbmVMaXRlcmFsc1VzaW5nYwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHOCAAAAdACDAHwAXwFkAHwAXwJkAHwAXwNkAHwAXwR8AXwAXwVkAXwAXwZ0B2oIfABfCWQBfABfCmQCfABfC2QCfABfDHQAgwB8AF8NZAJ8AF8OZAJ8AF8PZAF8AF8QZAN8AF8RZAF8AF8SZAR8AF8TZAB8AF8UZAF8AF8VZAJ8AF8WZABTACkFTlRGcqEAAAApA05OTikXcu0AAADaC3BhcnNlQWN0aW9u2gpmYWlsQWN0aW9u2gdzdHJSZXBy2gtyZXN1bHRzTmFtZdoKc2F2ZUFzTGlzdNoOc2tpcFdoaXRlc3BhY2VyJgAAAHK3AQAA2gp3aGl0ZUNoYXJz2hVjb3B5RGVmYXVsdFdoaXRlQ2hhcnPaDm1heVJldHVybkVtcHR52ghrZWVwVGFic9oLaWdub3JlRXhwcnPaBWRlYnVn2gtzdHJlYW1saW5lZNoNbWF5SW5kZXhFcnJvctoGZXJybXNn2gxtb2RhbFJlc3VsdHPaDGRlYnVnQWN0aW9uc9oCcmXaDGNhbGxQcmVwYXJzZdoNY2FsbER1cmluZ1RyeSkCcq0AAADaCHNhdmVsaXN0cnkAAAByeQAAAHJ6AAAAcq8AAAB4BAAAcygAAAAIAQYBBgIGAQYBBgEIAQYBBgEGAQgBBgEGAQYBBgEGAQYBBgEGAQoBehZQYXJzZXJFbGVtZW50Ll9faW5pdF9fYwEAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHM8AAAAdACgAHwAoQF9AXwAagFkAWQBhQIZAHwBXwF8AGoCZAFkAYUCGQB8AV8CfABqA3IcdARqBXwBXwZ8AVMAKQJhJAMAAAogICAgICAgIE1ha2UgYSBjb3B5IG9mIHRoaXMgQ3tQYXJzZXJFbGVtZW50fS4gIFVzZWZ1bCBmb3IgZGVmaW5pbmcgZGlmZmVyZW50IHBhcnNlIGFjdGlvbnMKICAgICAgICBmb3IgdGhlIHNhbWUgcGFyc2luZyBwYXR0ZXJuLCB1c2luZyBjb3BpZXMgb2YgdGhlIG9yaWdpbmFsIHBhcnNlIGVsZW1lbnQuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiBpbnQodG9rc1swXSkpCiAgICAgICAgICAgIGludGVnZXJLID0gaW50ZWdlci5jb3B5KCkuYWRkUGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IHRva3NbMF0qMTAyNCkgKyBTdXBwcmVzcygiSyIpCiAgICAgICAgICAgIGludGVnZXJNID0gaW50ZWdlci5jb3B5KCkuYWRkUGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IHRva3NbMF0qMTAyNCoxMDI0KSArIFN1cHByZXNzKCJNIikKICAgICAgICAgICAgCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShpbnRlZ2VySyB8IGludGVnZXJNIHwgaW50ZWdlcikucGFyc2VTdHJpbmcoIjVLIDEwMCA2NDBLIDI1Nk0iKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbNTEyMCwgMTAwLCA2NTUzNjAsIDI2ODQzNTQ1Nl0KICAgICAgICBFcXVpdmFsZW50IGZvcm0gb2YgQ3tleHByLmNvcHkoKX0gaXMganVzdCBDe2V4cHIoKX06OgogICAgICAgICAgICBpbnRlZ2VyTSA9IGludGVnZXIoKS5hZGRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSoxMDI0KjEwMjQpICsgU3VwcHJlc3MoIk0iKQogICAgICAgIE4pB3LzAAAAcr0BAAByxwEAAHLEAQAAciYAAABytwEAAHLDAQAAKQJyrQAAANoDY3B5cnkAAAByeQAAAHJ6AAAAcvMAAACPBAAAcwwAAAAKEBABEAEGAQgBBAF6ElBhcnNlckVsZW1lbnQuY29weWMCAAAAAAAAAAAAAAACAAAAAwAAAEMAAABzKgAAAHwBfABfAGQBfABqABcAfABfAXQCfABkAoMCchN8AGoBfABqA18EfABTACkDYWYBAAAKICAgICAgICBEZWZpbmUgbmFtZSBmb3IgdGhpcyBleHByZXNzaW9uLCBtYWtlcyBkZWJ1Z2dpbmcgYW5kIGV4Y2VwdGlvbiBtZXNzYWdlcyBjbGVhcmVyLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBXb3JkKG51bXMpLnBhcnNlU3RyaW5nKCJBQkMiKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIFc6KDAxMjMuLi4pIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICAgICAgV29yZChudW1zKS5zZXROYW1lKCJpbnRlZ2VyIikucGFyc2VTdHJpbmcoIkFCQyIpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgaW50ZWdlciAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAg+glFeHBlY3RlZCDaCWV4Y2VwdGlvbikFcuQAAAByywEAAHIcAQAActQBAAByqQAAAHI8AQAAcnkAAAByeQAAAHJ6AAAA2gdzZXROYW1lpgQAAHMKAAAABggMAQoBCgEEAXoVUGFyc2VyRWxlbWVudC5zZXROYW1lYwMAAAAAAAAAAAAAAAQAAAADAAAAQwAAAHM0AAAAfACgAKEAfQN8AaABZAGhAXIRfAFkAmQDhQIZAH0BZAR9AnwBfANfAnwCDAB8A18DfANTACkFYVADAAAKICAgICAgICBEZWZpbmUgbmFtZSBmb3IgcmVmZXJlbmNpbmcgbWF0Y2hpbmcgdG9rZW5zIGFzIGEgbmVzdGVkIGF0dHJpYnV0ZQogICAgICAgIG9mIHRoZSByZXR1cm5lZCBwYXJzZSByZXN1bHRzLgogICAgICAgIE5PVEU6IHRoaXMgcmV0dXJucyBhICpjb3B5KiBvZiB0aGUgb3JpZ2luYWwgQ3tQYXJzZXJFbGVtZW50fSBvYmplY3Q7CiAgICAgICAgdGhpcyBpcyBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGRlZmluZSBhIGJhc2ljIGVsZW1lbnQsIHN1Y2ggYXMgYW4KICAgICAgICBpbnRlZ2VyLCBhbmQgcmVmZXJlbmNlIGl0IGluIG11bHRpcGxlIHBsYWNlcyB3aXRoIGRpZmZlcmVudCBuYW1lcy4KCiAgICAgICAgWW91IGNhbiBhbHNvIHNldCByZXN1bHRzIG5hbWVzIHVzaW5nIHRoZSBhYmJyZXZpYXRlZCBzeW50YXgsCiAgICAgICAgQ3tleHByKCJuYW1lIil9IGluIHBsYWNlIG9mIEN7ZXhwci5zZXRSZXN1bHRzTmFtZSgibmFtZSIpfSAtIAogICAgICAgIHNlZSBMe0l7X19jYWxsX199PF9fY2FsbF9fPn0uCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBkYXRlX3N0ciA9IChpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJ5ZWFyIikgKyAnLycgCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJkYXkiKSkKCiAgICAgICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQogICAgICAgINoBKk5ydAAAAFQpBHLzAAAA2ghlbmRzd2l0aHLAAQAAcswBAAApBHKtAAAAcuQAAADaDmxpc3RBbGxNYXRjaGVz2gduZXdzZWxmcnkAAAByeQAAAHJ6AAAA2g5zZXRSZXN1bHRzTmFtZbQEAABzDgAAAAgUCgEMAQQBBgEIAQQBehxQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lVGMCAAAAAAAAAAAAAAADAAAABAAAAAMAAABzQgAAAHwBchR8AGoAiQBkBocAZgFkAmQDhAl9AogAfAJfAXwCfABfAHwAUwB0AnwAagBkBIMCch98AGoAagF8AF8AfABTACkHeqZNZXRob2QgdG8gaW52b2tlIHRoZSBQeXRob24gcGRiIGRlYnVnZ2VyIHdoZW4gdGhpcyBlbGVtZW50IGlzCiAgICAgICAgICAgYWJvdXQgdG8gYmUgcGFyc2VkLiBTZXQgQ3ticmVha0ZsYWd9IHRvIFRydWUgdG8gZW5hYmxlLCBGYWxzZSB0bwogICAgICAgICAgIGRpc2FibGUuCiAgICAgICAgVGMEAAAAAAAAAAAAAAAFAAAABQAAABMAAABzHgAAAGQBZABsAH0EfASgAaEAAQCIAHwAfAF8AnwDgwRTAHLcAAAAKQLaA3BkYtoJc2V0X3RyYWNlKQVyjQEAAHKoAAAA2glkb0FjdGlvbnPaDGNhbGxQcmVQYXJzZXLbAQAAqQHaDF9wYXJzZU1ldGhvZHJ5AAAAcnoAAADaB2JyZWFrZXLXBAAAcwYAAAAIAQgBDgF6J1BhcnNlckVsZW1lbnQuc2V0QnJlYWsuPGxvY2Fscz4uYnJlYWtlctoUX29yaWdpbmFsUGFyc2VNZXRob2ROqQJUVCkD2gZfcGFyc2Vy4gEAAHIcAQAAKQNyrQAAANoJYnJlYWtGbGFncuEBAAByeQAAAHLfAQAAcnoAAADaCHNldEJyZWFr0AQAAHMSAAAABAUGAQ4BBgQGAQQEDP4KAQQBehZQYXJzZXJFbGVtZW50LnNldEJyZWFrYwEAAAAAAAAAAAAAAAMAAAAFAAAATwAAAHMmAAAAdAB0AXQCdAB8AYMBgwKDAXwAXwN8AqAEZAFkAqECfABfBXwAUwApA2EYBwAACiAgICAgICAgRGVmaW5lIG9uZSBvciBtb3JlIGFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIHN1Y2Nlc3NmdWxseSBtYXRjaGluZyBwYXJzZSBlbGVtZW50IGRlZmluaXRpb24uCiAgICAgICAgUGFyc2UgYWN0aW9uIGZuIGlzIGEgY2FsbGFibGUgbWV0aG9kIHdpdGggMC0zIGFyZ3VtZW50cywgY2FsbGVkIGFzIEN7Zm4ocyxsb2MsdG9rcyl9LAogICAgICAgIEN7Zm4obG9jLHRva3MpfSwgQ3tmbih0b2tzKX0sIG9yIGp1c3QgQ3tmbigpfSwgd2hlcmU6CiAgICAgICAgIC0gcyAgID0gdGhlIG9yaWdpbmFsIHN0cmluZyBiZWluZyBwYXJzZWQgKHNlZSBub3RlIGJlbG93KQogICAgICAgICAtIGxvYyA9IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nCiAgICAgICAgIC0gdG9rcyA9IGEgbGlzdCBvZiB0aGUgbWF0Y2hlZCB0b2tlbnMsIHBhY2thZ2VkIGFzIGEgQ3tMe1BhcnNlUmVzdWx0c319IG9iamVjdAogICAgICAgIElmIHRoZSBmdW5jdGlvbnMgaW4gZm5zIG1vZGlmeSB0aGUgdG9rZW5zLCB0aGV5IGNhbiByZXR1cm4gdGhlbSBhcyB0aGUgcmV0dXJuCiAgICAgICAgdmFsdWUgZnJvbSBmbiwgYW5kIHRoZSBtb2RpZmllZCBsaXN0IG9mIHRva2VucyB3aWxsIHJlcGxhY2UgdGhlIG9yaWdpbmFsLgogICAgICAgIE90aGVyd2lzZSwgZm4gZG9lcyBub3QgbmVlZCB0byByZXR1cm4gYW55IHZhbHVlLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50czoKICAgICAgICAgLSBjYWxsRHVyaW5nVHJ5ID0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlIGlmIHBhcnNlIGFjdGlvbiBzaG91bGQgYmUgcnVuIGR1cmluZyBsb29rYWhlYWRzIGFuZCBhbHRlcm5hdGUgdGVzdGluZwoKICAgICAgICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSBMe0l7cGFyc2VTdHJpbmd9PHBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBDezxUQUI+fXMsIGFuZCBzdWdnZXN0ZWQgbWV0aG9kcyB0byBtYWludGFpbiBhCiAgICAgICAgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UgbG9jYXRpb24sIGFuZCBsaW5lIGFuZCBjb2x1bW4KICAgICAgICBwb3NpdGlv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YWx1ZSBpcyBwcm92aWRlZAogICAgICAgICAgICAgIHdpbGwgbGltaXQgdGhlIHNpemUgb2YgdGhlIHBhY2tyYXQgY2FjaGU7IGlmIE5vbmUgaXMgcGFzc2VkLCB0aGVuCiAgICAgICAgICAgICAgdGhlIGNhY2hlIHNpemUgd2lsbCBiZSB1bmJvdW5kZWQ7IGlmIDAgaXMgcGFzc2VkLCB0aGUgY2FjaGUgd2lsbAogICAgICAgICAgICAgIGJlIGVmZmVjdGl2ZWx5IGRpc2FibGVkLgogICAgICAgICAgICAKICAgICAgICAgICBUaGlzIHNwZWVkdXAgbWF5IGJyZWFrIGV4aXN0aW5nIHByb2dyYW1zIHRoYXQgdXNlIHBhcnNlIGFjdGlvbnMgdGhhdAogICAgICAgICAgIGhhdmUgc2lkZS1lZmZlY3RzLiAgRm9yIHRoaXMgcmVhc29uLCBwYWNrcmF0IHBhcnNpbmcgaXMgZGlzYWJsZWQgd2hlbgogICAgICAgICAgIHlvdSBmaXJzdCBpbXBvcnQgcHlwYXJzaW5nLiAgVG8gYWN0aXZhdGUgdGhlIHBhY2tyYXQgZmVhdHVyZSwgeW91cgogICAgICAgICAgIHByb2dyYW0gbXVzdCBjYWxsIHRoZSBjbGFzcyBtZXRob2QgQ3tQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKX0uICBJZgogICAgICAgICAgIHlvdXIgcHJvZ3JhbSB1c2VzIEN7cHN5Y299IHRvICJjb21waWxlIGFzIHlvdSBnbyIsIHlvdSBtdXN0IGNhbGwKICAgICAgICAgICBDe2VuYWJsZVBhY2tyYXR9IGJlZm9yZSBjYWxsaW5nIEN7cHN5Y28uZnVsbCgpfS4gIElmIHlvdSBkbyBub3QgZG8gdGhpcywKICAgICAgICAgICBQeXRob24gd2lsbCBjcmFzaC4gIEZvciBiZXN0IHJlc3VsdHMsIGNhbGwgQ3tlbmFibGVQYWNrcmF0KCl9IGltbWVkaWF0ZWx5CiAgICAgICAgICAgYWZ0ZXIgaW1wb3J0aW5nIHB5cGFyc2luZy4KICAgICAgICAgICAKICAgICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgICAgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHciYAAADaD19wYWNrcmF0RW5hYmxlZHIfAgAAcjICAAByLAIAAHI3AgAAcuQBAAApAdoQY2FjaGVfc2l6ZV9saW1pdHJ5AAAAcnkAAAByegAAANoNZW5hYmxlUGFja3JhdCUGAABzDgAAAAYbBgEIAQwBDAIMAQT6ehtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRjAwAAAAAAAAAAAAAACAAAAAoAAABDAAAAc6IAAAB0AKABoQABAHwAagJzC3wAoAOhAAEAfABqBEQAXQZ9A3wDoAOhAAEAcQ58AGoFcxx8AaAGoQB9AXoifACgB3wBZAGhAlwCfQR9BXwCcjx8AKAIfAF8BKECfQR0CYMAdAqDABcAfQZ8BqAHfAF8BKECAQBXAHwFUwBXAHwFUwAEAHQLeVABAH0HAQB6BnQAagxySoIAfAeCAWQCfQd+B3cBdwApA2FDBQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IEN7cGFyc2VBbGx9IHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBDe0x7U3RyaW5nRW5kKCl9fSkuCgogICAgICAgIE5vdGU6IEN7cGFyc2VTdHJpbmd9IGltcGxpY2l0bHkgY2FsbHMgQ3tleHBhbmR0YWJzKCl9IG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIEN7bG9jfSBhcmd1bWVudCB0byBpbmRleCBpbnRvIHRoZQogICAgICAgIHN0cmluZyBiZWluZyBwYXJzZWQsIHlvdSBjYW4gZW5zdXJlIHlvdSBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBpbnB1dAogICAgICAgIHN0cmluZyBieToKICAgICAgICAgLSBjYWxsaW5nIEN7cGFyc2VXaXRoVGFic30gb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIEN7cGFyc2VTdHJpbmd9CiAgICAgICAgICAgKHNlZSBMe0l7cGFyc2VXaXRoVGFic308cGFyc2VXaXRoVGFicz59KQogICAgICAgICAtIGRlZmluZSB5b3VyIHBhcnNlIGFjdGlvbiB1c2luZyB0aGUgZnVsbCBDeyhzLGxvYyx0b2tzKX0gc2lnbmF0dXJlLCBhbmQKICAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgQ3tzfSBhcmd1bWVudAogICAgICAgICAtIGV4cGxpY2l0bHkgZXhwYW5kIHRoZSB0YWJzIGluIHlvdXIgaW5wdXQgc3RyaW5nIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgICAgQ3twYXJzZVN0cmluZ30KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnKSAgIyAtPiBbJ2FhYWFhJ10KICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnLCBwYXJzZUFsbD1UcnVlKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIGVuZCBvZiB0ZXh0CiAgICAgICAgcgEAAABOKQ1yJgAAAHI4AgAAcskBAADaCnN0cmVhbWxpbmVyxwEAAHLGAQAA2gpleHBhbmR0YWJzcuQBAABy+wEAAHIPAAAAcisAAAByHwAAANoSdmVyYm9zZV9zdGFja3RyYWNlKQhyrQAAAHKNAQAA2ghwYXJzZUFsbHL1AQAAcqgAAAByBQIAANoCc2VylAEAAHJ5AAAAcnkAAAByegAAANoLcGFyc2VTdHJpbmdIBgAAcywAAAAIGwYBCAEKAgoBBgEIAQIBEAEEAQwBDAEOAQQIAvUECw75BgECAQQDCIAC+3oZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAAAAAAAPAAAACgAAAGMAAABzRAEAAIEAfABqAHMIfACgAaEAAQB8AGoCRABdBn0EfASgAaEAAQBxC3wAagNzG3QEfAGDAaAFoQB9AXQGfAGDAX0FZAF9BnwAagd9B3wAagh9CHQJoAqhAAEAZAF9CXpifAZ8BWsBcod8CXwCawByinoQfAd8AXwGgwJ9CnwIfAF8CmQCZAONA1wCfQt9DFcAbg0EAHQLeVMBAAEAAQB8CmQEFwB9BlkAbil3AHwLfAZrBHJ4fAlkBDcAfQl8DHwKfAtmA1YAAQB8A3J1fAd8AXwGgwJ9DXwNfAZrBHJwfAt9Bm4MfAZkBDcAfQZuB3wLfQZuBHwKZAQXAH0GfAZ8BWsBco18CXwCawBzNlcAZAVTAFcAZAVTAFcAZAVTAFcAZAVTAAQAdAx5oQEAfQ4BAHoGdAlqDXKbggB8DoIBZAV9Dn4OdwF3ACkGYYYEAAAKICAgICAgICBTY2FuIHRoZSBpbnB1dCBzdHJpbmcgZm9yIGV4cHJlc3Npb24gbWF0Y2hlcy4gIEVhY2ggbWF0Y2ggd2lsbCByZXR1cm4gdGhlCiAgICAgICAgbWF0Y2hpbmcgdG9rZW5zLCBzdGFydCBsb2NhdGlvbiwgYW5kIGVuZCBsb2NhdGlvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIEN7bWF4TWF0Y2hlc30gYXJndW1lbnQsIHRvIGNsaXAgc2Nhbm5pbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLiAgSWYKICAgICAgICBDe292ZXJsYXB9IGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcKICAgICAgICBzdHJpbmdzIHdpdGggZW1iZWRkZWQgdGFicy4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIHNvdXJjZSA9ICJzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODciCiAgICAgICAgICAgIHByaW50KHNvdXJjZSkKICAgICAgICAgICAgZm9yIHRva2VucyxzdGFydCxlbmQgaW4gV29yZChhbHBoYXMpLnNjYW5TdHJpbmcoc291cmNlKToKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArICdeJyooZW5kLXN0YXJ0KSkKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArIHRva2Vuc1swXSkKICAgICAgICAKICAgICAgICBwcmludHM6OgogICAgICAgIAogICAgICAgICAgICBzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODcKICAgICAgICAgICAgXl5eXl4KICAgICAgICAgICAgc2xkamYKICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgbHNkamprZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xka2pmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsa2pzZmQKICAgICAgICByAQAAAEapAXLeAQAAco0AAABOKQ5yyQEAAHI9AgAAcscBAAByxgEAAHKIAAAAcj4CAAByAwEAAHL7AQAAcuQB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AAAAc0IAAAB6DnQAZAFkAoQAfACgAXwBfAKhAkQAgwGDAVcAUwAEAHQCeSABAH0DAQB6BnQDagRyGoIAfAOCAWQDfQN+A3cBdwApBGGtAwAACiAgICAgICAgQW5vdGhlciBleHRlbnNpb24gdG8gQ3tMe3NjYW5TdHJpbmd9fSwgc2ltcGxpZnlpbmcgdGhlIGFjY2VzcyB0byB0aGUgdG9rZW5zIGZvdW5kCiAgICAgICAgdG8gbWF0Y2ggdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBDe21heE1hdGNoZXN9IGFyZ3VtZW50LCB0byBjbGlwIHNlYXJjaGluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgICMgYSBjYXBpdGFsaXplZCB3b3JkIHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsb3dlcmNhc2UgbGV0dGVycwogICAgICAgICAgICBjYXBfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQogICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQoY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKQoKICAgICAgICAgICAgIyB0aGUgc3VtKCkgYnVpbHRpbiBjYW4gYmUgdXNlZCB0byBtZXJnZSByZXN1bHRzIGludG8gYSBzaW5nbGUgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgICAgICBwcmludChzdW0oY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbWydNb3JlJ10sIFsnSXJvbiddLCBbJ0xlYWQnXSwgWydHb2xkJ10sIFsnSSddLCBbJ0VsZWN0cmljaXR5J11dCiAgICAgICAgICAgIFsnTW9yZScsICdJcm9uJywgJ0xlYWQnLCAnR29sZCcsICdJJywgJ0VsZWN0cmljaXR5J10KICAgICAgICBjAQAAAAAAAAAAAAAABAAAAAUAAABTAAAAcxYAAABnAHwAXQdcA30BfQJ9A3wBkQJxAlMAcnkAAAByeQAAACkEcooAAAByeAAAAHKQAAAAcvUBAAByeQAAAHJ5AAAAcnoAAABy+gAAAP8GAADzAgAAABYAei5QYXJzZXJFbGVtZW50LnNlYXJjaFN0cmluZy48bG9jYWxzPi48bGlzdGNvbXA+TikFciQAAABySwIAAHIfAAAAciYAAAByPwIAACkEcq0AAAByjQEAAHJEAgAAcpQBAAByeQAAAHJ5AAAAcnoAAADaDHNlYXJjaFN0cmluZ+wGAABzEAAAAAISHAEOAQYBAgEEAwiAAvt6GlBhcnNlckVsZW1lbnQuc2VhcmNoU3RyaW5nYwQAAAAAAAAAAAAAAAkAAAAEAAAAYwAAAHNWAAAAgQBkAX0EZAF9BXwAagB8AXwCZAKNAkQAXRVcA30GfQd9CHwBfAV8B4UCGQBWAAEAfANyH3wGZAEZAFYAAQB8CH0FcQx8AXwFZAOFAhkAVgABAGQDUwApBGFbAgAACiAgICAgICAgR2VuZXJhdG9yIG1ldGhvZCB0byBzcGxpdCBhIHN0cmluZyB1c2luZyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhcyBhIHNlcGFyYXRvci4KICAgICAgICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwgQ3ttYXhzcGxpdH0gYXJndW1lbnQsIHRvIGxpbWl0IHRoZSBudW1iZXIgb2Ygc3BsaXRzOwogICAgICAgIGFuZCB0aGUgb3B0aW9uYWwgQ3tpbmNsdWRlU2VwYXJhdG9yc30gYXJndW1lbnQgKGRlZmF1bHQ9Q3tGYWxzZX0pLCBpZiB0aGUgc2VwYXJhdGluZwogICAgICAgIG1hdGNoaW5nIHRleHQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzcGxpdCByZXN1bHRzLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OiAgICAgICAgCiAgICAgICAgICAgIHB1bmMgPSBvbmVPZihsaXN0KCIuLDs6Ly0hPyIpKQogICAgICAgICAgICBwcmludChsaXN0KHB1bmMuc3BsaXQoIlRoaXMsIHRoaXM/LCB0aGlzIHNlbnRlbmNlLCBpcyBiYWRseSBwdW5jdHVhdGVkISIpKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbJ1RoaXMnLCAnIHRoaXMnLCAnJywgJyB0aGlzIHNlbnRlbmNlJywgJyBpcyBiYWRseSBwdW5jdHVhdGVkJywgJyddCiAgICAgICAgcgEAAAApAXJEAgAATikBcksCAAApCXKtAAAAco0BAADaCG1heHNwbGl02hFpbmNsdWRlU2VwYXJhdG9yc9oGc3BsaXRz2gRsYXN0cngAAABykAAAAHL1AQAAcnkAAAByeQAAAHJ6AAAAcpIAAAAHBwAAcxIAAAACgAQNBAEYAQ4BBAEKAQYBEgF6E1BhcnNlckVsZW1lbnQuc3BsaXRjAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAA80YAAAB0AHwBdAGDAnIKdAKgA3wBoQF9AXQAfAF0AoMCcx10BGoFZAF0BnwBgwEWAHQHZAJkA40DAQBkBFMAdAh8AHwBZwKDAVMAKQVhlgEAAAogICAgICAgIEltcGxlbWVudGF0aW9uIG9mICsgb3BlcmF0b3IgLSByZXR1cm5zIEN7THtBbmR9fS4gQWRkaW5nIHN0cmluZ3MgdG8gYSBQYXJzZXJFbGVtZW50CiAgICAgICAgY29udmVydHMgdGhlbSB0byBMe0xpdGVyYWx9cyBieSBkZWZhdWx0LgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgogICAgICAgICAgICBoZWxsbyA9ICJIZWxsbywgV29ybGQhIgogICAgICAgICAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKICAgICAgICBQcmludHM6OgogICAgICAgICAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcs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LCBzaW1pbGFyIHRvIEN7e21pbixtYXh9fSBtdWx0aXBsaWVycyBpbiByZWd1bGFyIGV4cHJlc3Npb25zLiAgVHVwbGVzCiAgICAgICAgbWF5IGFsc28gaW5jbHVkZSBDe05vbmV9IGFzIGluOgogICAgICAgICAtIEN7ZXhwcioobixOb25lKX0gb3IgQ3tleHByKihuLCl9IGlzIGVxdWl2YWxlbnQKICAgICAgICAgICAgICB0byBDe2V4cHIqbiArIEx7WmVyb09yTW9yZX0oZXhwcil9CiAgICAgICAgICAgICAgKHJlYWQgYXMgImF0IGxlYXN0IG4gaW5zdGFuY2VzIG9mIEN7ZXhwcn0iKQogICAgICAgICAtIEN7ZXhwciooTm9uZSxuKX0gaXMgZXF1aXZhbGVudCB0byBDe2V4cHIqKDAsbil9CiAgICAgICAgICAgICAgKHJlYWQgYXMgIjAgdG8gbiBpbnN0YW5jZXMgb2YgQ3tleHByfSIpCiAgICAgICAgIC0gQ3tleHByKihOb25lLE5vbmUpfSBpcyBlcXVpdmFsZW50IHRvIEN7THtaZXJvT3JNb3JlfShleHByKX0KICAgICAgICAgLSBDe2V4cHIqKDEsTm9uZSl9IGlzIGVxdWl2YWxlbnQgdG8gQ3tMe09uZU9yTW9yZX0oZXhwcil9CgogICAgICAgIE5vdGUgdGhhdCBDe2V4cHIqKE5vbmUsbil9IGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgIG1vcmUgdGhhbiBuIGV4cHJzIGV4aXN0IGluIHRoZSBpbnB1dCBzdHJlYW07IHRoYXQgaXMsCiAgICAgICAgQ3tleHByKihOb25lLG4pfSBkb2VzIG5vdCBlbmZvcmNlIGEgbWF4aW11bSBudW1iZXIgb2YgZXhwcgogICAgICAgIG9jY3VycmVuY2VzLiAgSWYgdGhpcyBiZWhhdmlvciBpcyBkZXNpcmVkLCB0aGVuIHdyaXRlCiAgICAgICAgQ3tleHByKihOb25lLG4pICsgfmV4cHJ9CiAgICAgICAgcgEAAAApAk5OTnJzAAAAco0AAAB6N2Nhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcgYW5kICgnJXMnLCclcycpIG9iamVj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fABfBHwAUwApAmGOBgAACiAgICAgICAgRW5hYmxlIGRpc3BsYXkgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIGRvaW5nIHBhdHRlcm4gbWF0Y2hpbmcuCiAgICAgICAgU2V0IEN7ZmxhZ30gdG8gVHJ1ZSB0byBlbmFibGUsIEZhbHNlIHRvIGRpc2FibGUuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKS5zZXROYW1lKCJhbHBoYXdvcmQiKQogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXROYW1lKCJudW13b3JkIikKICAgICAgICAgICAgdGVybSA9IHdkIHwgaW50ZWdlcgogICAgICAgICAgICAKICAgICAgICAgICAgIyB0dXJuIG9uIGRlYnVnZ2luZyBmb3Igd2QKICAgICAgICAgICAgd2Quc2V0RGVidWcoKQoKICAgICAgICAgICAgT25lT3JNb3JlKHRlcm0pLnBhcnNlU3RyaW5nKCJhYmMgMTIzIHh5eiA4OTAiKQogICAgICAgIAogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMCgxLDEpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsnYWJjJ10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAzKDEsNCkKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDcoMSw4KQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ3h5eiddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTEoMSwxMikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTIpLCAobGluZToxLCBjb2w6MTMpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTUoMSwxNikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTUpLCAobGluZToxLCBjb2w6MTYpCgogICAgICAgIFRoZSBvdXRwdXQgc2hvd24gaXMgdGhhdCBwcm9kdWNlZCBieSB0aGUgZGVmYXVsdCBkZWJ1ZyBhY3Rpb25zIC0gY3VzdG9tIGRlYnVnIGFjdGlvbnMgY2FuIGJlCiAgICAgICAgc3BlY2lmaWVkIHVzaW5nIEx7c2V0RGVidWdBY3Rpb25zfS4gUHJpb3IgdG8gYXR0ZW1wdGluZwogICAgICAgIHRvIG1hdGNoIHRoZSBDe3dkfSBleHByZXNzaW9uLCB0aGUgZGVidWdnaW5nIG1lc3NhZ2UgQ3siTWF0Y2ggPGV4cHJuYW1lPiBhdCBsb2MgPG4+KDxsaW5lPiw8Y29sPikifQogICAgICAgIGlzIHNob3duLiBUaGVuIGlmIHRoZSBwYXJzZSBzdWNjZWVkcywgYSBDeyJNYXRjaGVkIn0gbWVzc2FnZSBpcyBzaG93biwgb3IgYW4gQ3siRXhjZXB0aW9uIHJhaXNlZCJ9CiAgICAgICAgbWVzc2FnZSBpcyBzaG93bi4gQWxzbyBub3RlIHRoZSB1c2Ugb2YgTHtzZXROYW1lfSB0byBhc3NpZ24gYSBodW1hbi1yZWFkYWJsZSBuYW1lIHRvIHRoZSBleHByZXNzaW9uLAogICAgICAgIHdoaWNoIG1ha2VzIGRlYnVnZ2luZyBhbmQgZXhjZXB0aW9uIG1lc3NhZ2VzIGVhc2llciB0byB1bmRlcnN0YW5kIC0gZm9yIGluc3RhbmNlLCB0aGUgZGVmYXVsdAogICAgICAgIG5hbWUgY3JlYXRlZCBmb3IgdGhlIEN7V29yZH0gZXhwcmVzc2lvbiB3aXRob3V0IGNhbGxpbmcgQ3tzZXROYW1lfSBpcyBDeyJXOihBQkNELi4uKSJ9LgogICAgICAgIEYpBXJ/AgAAco8BAABykwEAAHKVAQAAcsgBAAApAnKtAAAA2gRmbGFncnkAAAByeQAAAHJ6AAAA2ghzZXREZWJ1Z0AIAABzCgAAAAQjDgEEAwb/BAF6FlBhcnNlckVsZW1lbnQuc2V0RGVi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cHJlc3Npb24gZm9yIGluZGljYXRpbmcgZW1iZWRkZWQgY29tbWVudHMgaW4gdGhlIHRlc3QgCiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBkdW1wIHJlc3VsdHMgYXMgbGlzdCBmb2xsb3dlZCBieSByZXN1bHRzIG5hbWVzIGluIG5lc3RlZCBvdXRsaW5lOwogICAgICAgICAgICAgIGlmIEZhbHNlLCBvbmx5IGR1bXAgbmVzdGVkIGxpc3QKICAgICAgICAgLSBwcmludFJlc3VsdHMgLSAoZGVmYXVsdD1De1RydWV9KSBwcmludHMgdGVzdCBvdXRwdXQgdG8gc3Rkb3V0CiAgICAgICAgIC0gZmFpbHVyZVRlc3RzIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCgogICAgICAgIFJldHVybnM6IGEgKHN1Y2Nlc3MsIHJlc3VsdHMpIHR1cGxlLCB3aGVyZSBzdWNjZXNzIGluZGljYXRlcyB0aGF0IGFsbCB0ZXN0cyBzdWNjZWVkZWQKICAgICAgICAob3IgZmFpbGVkIGlmIEN7ZmFpbHVyZVRlc3RzfSBpcyBUcnVlKSwgYW5kIHRoZSByZXN1bHRzIGNvbnRhaW4gYSBsaXN0IG9mIGxpbmVzIG9mIGVhY2ggCiAgICAgICAgdGVzdCdzIG91dHB1dAogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBbMTAwXQoKICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgWy0xMDBdCgogICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgWzFlLTEyXQoKICAgICAgICAgICAgU3VjY2VzcwogICAgICAgICAgICAKICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDMpLCAobGluZToxLCBjb2w6NCkKCiAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCB7cmVhbCBudW1iZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uIHwgcmVhbCBudW1iZXIgfCBzaWduZWQgaW50ZWdlcn0gKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQoKICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQoKICAgICAgICAgICAgU3VjY2VzcwoKICAgICAgICBFYWNoIHRlc3Qgc3RyaW5nIG11c3QgYmUgb24gYSBzaW5nbGUgbGluZS4gSWYgeW91IHdhbnQgdG8gdGVzdCBhIHN0cmluZyB0aGF0IHNwYW5zIG11bHRpcGxlCiAgICAgICAgbGluZXMsIGNyZWF0ZSBhIHRlc3QgbGlrZSB0aGlzOjoKCiAgICAgICAgICAgIGV4cHIucnVuVGVzdChyInRoaXMgaXMgYSB0ZXN0XG4gb2Ygc3RyaW5ncyB0aGF0IHNwYW5zIFxuIDMgbGluZXMiKQogICAgICAgIAogICAgICAgIChOb3RlIHRoYXQgdGhpcyBpcyBhIHJhdyBzdHJpbmcgbGl0ZXJhbCwgeW91IG11c3QgaW5jbHVkZSB0aGUgbGVhZGluZyAncicuKQogICAgICAgIFRORnJdAQAA+gJcbnKZAgAAKQFyewEAAHoHKEZBVEFMKXKhAAAA+gEgco0AAAD6AV56BkZBSUw6IHoQRkFJTC1FWENFUFRJT046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ZWQgc3RyaW5nIGFzIGEga2V5d29yZCwgdGhhdCBpcywgaXQgbXVzdCBiZQogICAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBub24ta2V5d29yZCBjaGFyYWN0ZXIuICBDb21wYXJlIHdpdGggQ3tMe0xpdGVyYWx9fToKICAgICAtIEN7TGl0ZXJhbCgiaWYiKX0gd2lsbCBtYXRjaCB0aGUgbGVhZGluZyBDeydpZid9IGluIEN7J2lmQW5kT25seUlmJ30uCiAgICAgLSBDe0tleXdvcmQoImlmIil9IHdpbGwgbm90OyBpdCB3aWxsIG9ubHkgbWF0Y2ggdGhlIGxlYWRpbmcgQ3snaWYnfSBpbiBDeydpZiB4PTEnfSwgb3IgQ3snaWYoeT09MiknfQogICAgQWNjZXB0cyB0d28gb3B0aW9uYWwgY29uc3RydWN0b3IgYXJndW1lbnRzIGluIGFkZGl0aW9uIHRvIHRoZSBrZXl3b3JkIHN0cmluZzoKICAgICAtIEN7aWRlbnRDaGFyc30gaXMgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIHZhbGlkIGlkZW50aWZpZXIgY2hhcmFjdGVycywKICAgICAgICAgIGRlZmF1bHRpbmcgdG8gYWxsIGFscGhhbnVtZXJpY3MgKyAiXyIgYW5kICIkIgogICAgIC0gQ3tjYXNlbGVzc30gYWxsb3dzIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcsIGRlZmF1bHQgaXMgQ3tGYWxzZX0uCiAgICAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIEtleXdvcmQoInN0YXJ0IikucGFyc2VTdHJpbmcoInN0YXJ0IikgICMgLT4gWydzdGFydCddCiAgICAgICAgS2V5d29yZCgic3RhcnQiKS5wYXJzZVN0cmluZygic3RhcnRpbmciKSAgIyAtPiBFeGNlcHRpb24KCiAgICBGb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgdXNlIEx7Q2FzZWxlc3NLZXl3b3JkfS4KICAgIPoCXyRORmMEAAAAAAAAAAAAAAAEAAAACAAAAAMAAABzrAAAAHQAdAF8AIMCoAKhAAEAfAJkAHUAcg50AWoDfQJ8AXwAXwR0BXwBgwF8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aW5nIHVzZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBpbnB1dCBzdHJpbmcKICAgIAogICAgSWYgQ3ttaXNtYXRjaGVzfSBpcyBhbiBlbXB0eSBsaXN0LCB0aGVuIHRoZSBtYXRjaCB3YXMgYW4gZXhhY3QgbWF0Y2guCiAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFYR0dBIikgIyAtPiAoWydBVENBVENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVhDR0FBWEdHQSIpICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCAnQVRDQVRDR0FBVEdHQScgKHdpdGggdXAgdG8gMSBtaXNtYXRjaGVzKSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICMgZXhhY3QgbWF0Y2gKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFUR0dBIikgIyAtPiAoWydBVENBVENHQUFUR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbXV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKCiAgICAgICAgIyBjbG9zZSBtYXRjaCBhbGxvd2luZyB1cCB0byAyIG1pc21hdGNoZXMKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIsIG1heE1pc21hdGNoZXM9MikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiAoWydBVENBWENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbNCwgOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICByjQAAAGMDAAAAAAAAAAAAAAADAAAAAwAAAAMAAABzQgAAAHQAdAF8AIMCoAKhAAEAfAF8AF8DfAF8AF8EfAJ8AF8FZAF8AGoEfABqBWYCFgB8AF8GZAJ8AF8HZAJ8AF8IZABTACkDTnomRXhwZWN0ZWQgJXIgKHdpdGggdXAgdG8gJWQgbWlzbWF0Y2hlcylGKQlyjgIAAHJuAAAAcq8AAABy5AAAANoMbWF0Y2hfc3RyaW5n2g1tYXhNaXNtYXRjaGVzcssBAAByygEAAHLFAQAAKQNyrQAAAHLIAgAAcskCAAByjwIAAHJ5AAAAcnoAAAByrwAAAAoKAABzDgAAAA4BBgEGAQYBEgEGAQoBehNDbG9zZU1hdGNoLl9faW5pdF9fVGMEAAAAAAAAAAAAAAAPAAAABQAAAEMAAABzxgAAAHwCfQR0AHwBgwF9BXwEdAB8AGoBgwEXAH0GfAZ8BWsBclt8AGoBfQdkAX0IZwB9CXwAagJ9CnQDdAR8AXwCfAaFAhkAfABqAYMCgwFEAF0ZXAJ9CH0LfAtcAn0MfQ18DHwNawNyQHwJoAV8CKEBAQB0AHwJgwF8CmsEckABAG4bcSd8CGQCFwB9AnQGfAF8BHwChQIZAGcBgwF9DnwAagF8DmQDPAB8CXwOZAQ8AHwCfA5mAlMAdAd8AXwCfABqCHwAgwSCASkFTnIBAAAAco0AAADaCG9yaWdpbmFs2gptaXNtYXRjaGVzKQlyAwEAAHLIAgAAcskCAAByCAEAAHKTAAAAcjYBAAByJAAAAHIhAAAAcssBAAApD3KtAAAAco0BAAByqAAAAHLdAQAA2gVzdGFydHL6AQAA2gZtYXhsb2NyyAIAANoPbWF0Y2hfc3RyaW5nbG9jcssCAAByyQIAANoDc19t2gNzcmPaA21hdNoHcmVzdWx0c3J5AAAAcnkAAAByegAAAHL9AQAAEwoAAHMqAAAABAEIAQ4BCAIGAQQBBAEGASACCAEIAQoBDAEEAQKACAISAQoBCAEIARACehRDbG9zZU1hdGNoLnBhcnNlSW1wbCkBco0AAAByrAIAAHK2AgAAcnkAAAByeQAAAHKPAgAAcnoAAABybgAAAPEJAABzCAAAAAgABAEOGBIJcm4AAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAczgAAABlAFoBZABaAmQBWgNkDYcAZgFkBmQHhAlaBGQOZAlkCoQBWgWHAGYBZAtkDIQIWgaHAAQAWgdTACkPcjEAAABhFAkAAAogICAgVG9rZW4gZm9yIG1hdGNoaW5nIHdvcmRzIGNvbXBvc2VkIG9mIGFsbG93ZWQgY2hhcmFjdGVyIHNldHMuCiAgICBEZWZpbmVkIHdpdGggc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGFsbG93ZWQgaW5pdGlhbCBjaGFyYWN0ZXJzLAogICAgYW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgYWxsb3dlZCBib2R5IGNoYXJhY3RlcnMgKGlmIG9taXR0ZWQsCiAgICBkZWZhdWx0cyB0byB0aGUgaW5pdGlhbCBjaGFyYWN0ZXIgc2V0KSwgYW5kIGFuIG9wdGlvbmFsIG1pbmltdW0sCiAgICBtYXhpbXVtLCBhbmQvb3IgZXhhY3QgbGVuZ3RoLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIEN7bWlufSBpcyAxIChhCiAgICBtaW5pbXVtIHZhbHVlIDwgMSBpcyBub3QgdmFsaWQpOyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIEN7bWF4fSBhbmQgQ3tleGFjdH0KICAgIGFyZSAwLCBtZWFuaW5nIG5vIG1heGltdW0gb3IgZXhhY3QgbGVuZ3RoIHJlc3RyaWN0aW9uLiBBbiBvcHRpb25hbAogICAgQ3tleGNsdWRlQ2hhcnN9IHBhcmFtZXRlciBjYW4gbGlzdCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgZm91bmQgaW4gCiAgICB0aGUgaW5wdXQgQ3tib2R5Q2hhcnN9IHN0cmluZzsgdXNlZnVsIHRvIGRlZmluZSBhIHdvcmQgb2YgYWxsIHByaW50YWJsZXMKICAgIGV4Y2VwdCBmb3Igb25lIG9yIHR3byBjaGFyYWN0ZXJzLCBmb3IgaW5zdGFuY2UuCiAgICAKICAgIEx7c3JhbmdlfSBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MgZm9yIGRlZmluaW5nIAogICAgQ3tXb3JkfSBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbSByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVyIHNldHMuCiAgICAKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIEN7V29yZH0gdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsIHN0cmluZywgYXMgaW4gCiAgICBDe1dvcmQoIkFkZHJlc3MiKX0uIFJlbWVtYmVyIHRoYXQgQ3tXb3JkfSB1c2VzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGVmaW5lCiAgICBJe3NldHN9IG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLiBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLAogICAgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuCiAgICBUbyBtYXRjaCBhbiBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIEx7TGl0ZXJhbH0gb3IgTHtLZXl3b3JkfS4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgogICAgIC0gTHthbHBoYXN9CiAgICAgLSBMe251bXN9CiAgICAgLSBMe2FscGhhbnVtc30KICAgICAtIEx7aGV4bnVtc30KICAgICAtIEx7YWxwaGFzOGJpdH0gKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAgLSBMe3B1bmM4Yml0fSAobm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0gTHtwcmludGFibGVzfSAoYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcikKCiAgICBFeGFtcGxlOjoKICAgICAgICAjIGEgd29yZCBjb21wb3NlZCBvZiBkaWdpdHMKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKSAjIGVxdWl2YWxlbnQgdG8gV29yZCgiMDEyMzQ1Njc4OSIpIG9yIFdvcmQoc3JhbmdlKCIwLTkiKSkK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CiAgICBEZWZpbmVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogICAgICAgIC0gcXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlIHF1b3RlIGRlbGltaXRpbmcgc3RyaW5nCiAgICAgICAgLSBlc2NDaGFyIC0gY2hhcmFjdGVyIHRvIGVzY2FwZSBxdW90ZXMsIHR5cGljYWxseSBiYWNrc2xhc2ggKGRlZmF1bHQ9Q3tOb25lfSkKICAgICAgICAtIGVzY1F1b3RlIC0gc3BlY2lhbCBxdW90ZSBzZXF1ZW5jZSB0byBlc2NhcGUgYW4gZW1iZWRkZWQgcXVvdGUgc3RyaW5nIChzdWNoIGFzIFNRTCdzICIiIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCAiKSAoZGVmYXVsdD1De05vbmV9KQogICAgICAgIC0gbXVsdGlsaW5lIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgcXVvdGVzIGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzIChkZWZhdWx0PUN7RmFsc2V9KQogICAgICAgIC0gdW5xdW90ZVJlc3VsdHMgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWF0Y2hlZCB0ZXh0IHNob3VsZCBiZSB1bnF1b3RlZCAoZGVmYXVsdD1De1RydWV9KQogICAgICAgIC0gZW5kUXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlIGVuZCBvZiB0aGUgcXVvdGUgZGVsaW1pdGVkIHN0cmluZyAoZGVmYXVsdD1De05vbmV9ID0+IHNhbWUgYXMgcXVvdGVDaGFyKQogICAgICAgIC0gY29udmVydFdoaXRlc3BhY2VFc2NhcGVzIC0gY29udmVydCBlc2NhcGVkIHdoaXRlc3BhY2UgKEN7J1x0J30sIEN7J1xuJ30sIGV0Yy4pIHRvIGFjdHVhbCB3aGl0ZXNwYWNlIChkZWZhdWx0PUN7VHJ1ZX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgcXMgPSBRdW90ZWRTdHJpbmcoJyInKQogICAgICAgIHByaW50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RSBQVVJQTEUgQkxBQ0sgV0hJVEUgQlJPV04iKQogICAgICAgIHNoYXBlX3R5cGUgPSBvbmVPZigiU1FVQVJFIENJUkNMRSBUUklBTkdMRSBTVEFSIEhFWEFHT04gT0NUQUdPTiIpCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBzaGFwZV9hdHRyID0gInNoYXBlOiIgKyBzaGFwZV90eXBlKCJzaGFwZSIpCiAgICAgICAgcG9zbl9hdHRyID0gInBvc246IiArIEdyb3VwKGludGVnZXIoIngiKSArICcsJyArIGludGVnZXIoInkiKSkoInBvc24iKQogICAgICAgIGNvbG9yX2F0dHIgPSAiY29sb3I6IiArIGNvbG9yKCJjb2xvciIpCiAgICAgICAgc2l6ZV9hdHRyID0gInNpemU6IiArIGludGVnZXIoInNpemUiKQoKICAgICAgICAjIHVzZSBFYWNoICh1c2luZyBvcGVyYXRvciAnJicpIHRvIGFjY2VwdCBhdHRyaWJ1dGVzIGluIGFueSBvcmRlciAKICAgICAgICAjIChzaGFwZSBhbmQgcG9zbiBhcmUgcmVxdWlyZWQsIGNvbG9yIGFuZCBzaXplIGFyZSBvcHRpb25hbCkKICAgICAgICBzaGFwZV9zcGVjID0gc2hhcGVfYXR0ciAmIHBvc25fYXR0ciAmIE9wdGlvbmFsKGNvbG9yX2F0dHIpICYgT3B0aW9uYWwoc2l6ZV9hdHRyKQoKICAgICAgICBzaGFwZV9zcGVjLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgICAgIGNvbG9yOkdSRUVOIHNpemU6MjAgc2hhcGU6VFJJQU5HTEUgcG9zbjoyMCw0MAogICAgICAgICAgICAnJycKICAgICAgICAgICAgKQogICAgcHJpbnRzOjoKICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgIFsnc2hhcGU6JywgJ1NRVUFSRScsICdjb2xvcjonLCAnQkxBQ0snLCAncG9zbjonLCBbJzEwMCcsICcsJywgJzEyMCddXQogICAgICAgIC0gY29sb3I6IEJMQUNLCiAgICAgICAgLSBwb3NuOiBbJzEwMCcsICcsJywgJzEyMCddCiAgICAgICAgICAtIHg6IDEwMAogICAgICAgICAgLSB5OiAxMjAKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKCgogICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICBbJ3NoYXBlOicsICdDSVJDTEUnLCAnc2l6ZTonLCAnNTAnLCAnY29sb3I6JywgJ0JMVUUnLCAncG9zbjonLCBbJzUwJywgJywnLCAnODAnXV0KICAgICAgICAtIGNvbG9yOiBCTFVFCiAgICAgICAgLSBwb3NuOiBbJzUwJywgJywnLCAnODAnXQogICAgICAgICAgLSB4OiA1MAogICAgICAgICAgLSB5OiA4MAogICAgICAgIC0gc2hhcGU6IENJUkNMRQogICAgICAgIC0gc2l6ZTogNTAKCgogICAgICAgIGNvbG9yOiBHUkVFTiBzaXplOiAyMCBzaGFwZTogVFJJQU5HTEUgcG9zbjogMjAsNDAKICAgICAgICBbJ2NvbG9yOicsICdHUkVFTicsICdzaXplOicsICcyMCcsICdzaGFwZTonLCAnVFJJQU5HTEUnLCAncG9zbjonLCBbJzIwJywgJywnLCAnNDAnXV0KICAgICAgICAtIGNvbG9yOiBHUkVFTgogICAgICAgIC0gcG9zbjogWycyMCcsICcsJywgJzQwJ10KICAgICAgICAgIC0geDogMjAKICAgICAgICAgIC0geTogNDAKICAgICAgICAtIHNoYXBlOiBUUklBTkdMRQogICAgICAgIC0gc2l6ZTogMjAKICAgIFRjAwAAAAAAAAAAAAAAAwAAAAQAAAADAAAAczgAAAB0AHQBfACDAqACfAF8AqECAQB0A2QBZAKEAHwAagREAIMBgwF8AF8FZAN8AF8GZAN8AF8HZABTACkETmMBAAAAAAAAAAAAAAACAAAAAgAAAHMAAAByMAMAAHKJAAAAcjEDAAByKgMAAHJ5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ZXMKICAgICAtIHN0b3BPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24gCiAgICAgICAgICBleHByZXNzaW9uKSAgICAgICAgICAKCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IEJMQUNLIgogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICAjIEZhaWwhIHJlYWQgJ2NvbG9yJyBhcyBkYXRhIGluc3RlYWQgb2YgbmV4dCBsYWJlbCAtPiBbWydzaGFwZScsICdTUVVBUkUgY29sb3InXV0KCiAgICAgICAgIyB1c2Ugc3RvcE9uIGF0dHJpYnV0ZSBmb3IgT25lT3JNb3JlIHRvIGF2b2lkIHJlYWRpbmcgbGFiZWwgc3RyaW5nIGFzIHBhcnQgb2YgdGhlIGRhdGEKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAjIEJldHRlciAtPiBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwg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CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBVUyBwb3N0YWwgY29kZSBjYW4gYmUgYSA1LWRpZ2l0IHppcCwgcGx1cyBvcHRpb25hbCA0LWRpZ2l0IHF1YWxpZmllcgogICAgICAgIHppcCA9IENvbWJpbmUoV29yZChudW1zLCBleGFjdD01KSArIE9wdGlvbmFsKCctJyArIFdvcmQobnVtcywgZXhhY3Q9NCkpKQogICAgICAgIHppcC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgICAgICAxMjM0NQogICAgICAgICAgICAKICAgICAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgICAgIDEyMTAxLTAwMDEKICAgICAgICAgICAgCiAgICAgICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMuAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQB8AGoDagR8AF8EfAJ8AF8FZAN8AF8GZABTACkETkZysgIAAFQpB3KOAgAAch0AAAByrwAAAHKOAQAAcsEBAAByMwEAAHLFAQAAKQNyrQAAAHKOAQAAci0BAAByjwIAAHJ5AAAAcnoAAAByrwAAAJ0PAABzCAAAABQBCgEGAQoBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABQAAAAkAAABDAAAAc5AAAAB6EXwAagBqAXwBfAJ8A2QBZAKNBFwCfQJ9BFcAfAJ8BGYCUwAEAHQCdANmAnlHAQABAAEAfABqBHQFdQFyNnwAagBqBnIxdAd8AGoEZwGDAX0EfABqBHwEfABqAGoGPABuEXwAagRnAX0EbgdnAH0EWQB8AnwEZgJTAFkAfAJ8BGYCUwBZAHwCfARmAlMAdwByeAMAACkIco4BAABy5AEAAHIhAAAAcvYAAAByMwEAANoTX29wdGlvbmFsTm90TWF0Y2hlZHLAAQAAciQAAAApBXKtAAAAco0BAAByqAAAAHLdAQAAcgUCAAByeQAAAHJ5AAAAcnoAAABy/QEAAKMPAABzIAAAAAIBGgEIChD3CgEIAQwBEAEKAgYCCAEC/QgDAvsIBQL3ehJPcHRpb25hbC5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcnEDAAApBE5y5AAAAHJNAQAAclABAABycgMAAHK3AAAAcnkAAAByeQAAAHJ6AAAAcrgAAACxDwAAcnMDAAB6EE9wdGlvbmFsLl9fc3RyX19yrAIAACkJcpwAAABynQAAAHKeAAAAcsgAAABygQMAAHKvAAAAcv0BAAByuAAAAHKvAgAAcnkAAAByeQAAAHKPAgAAcnoAAAByHQAAAHoPAABzCgAAAAgABAEQIgoGEA5yHQAAAGMAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABzLAAAAGUAWgFkAFoCZAFaA2QJhwBmAWQEZAWECVoEZApkB2QIhAFaBYcABABaBlMAKQtyKgAAAGH/CQAACiAgICBUb2tlbiBmb3Igc2tpcHBpbmcgb3ZlciBhbGwgdW5kZWZpbmVkIHRleHQgdW50aWwgdGhlIG1hdGNoZWQgZXhwcmVzc2lvbiBpcyBmb3VuZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIHRhcmdldCBleHByZXNzaW9uIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgZGF0YSB0byBiZSBza2lwcGVkCiAgICAgLSBpbmNsdWRlIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGlmIFRydWUsIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBhbHNvIHBhcnNlZCAKICAgICAgICAgICh0aGUgc2tpcHBlZCB0ZXh0IGFuZCB0YXJnZXQgZXhwcmVzc2lvbiBhcmUgcmV0dXJuZWQgYXMgYSAyLWVsZW1lbnQgbGlzdCkuCiAgICAgLSBpZ25vcmUgLSAoZGVmYXVsdD1De05vbmV9KSB1c2VkIHRvIGRlZmluZSBncmFtbWFycyAodHlwaWNhbGx5IHF1b3RlZCBzdHJpbmdzIGFuZCAKICAgICAgICAgIGNvbW1lbnRzKSB0aGF0IG1pZ2h0IGNvbnRhaW4gZmFsc2UgbWF0Y2hlcyB0byB0aGUgdGFyZ2V0IGV4cHJlc3Npb24KICAgICAtIGZhaWxPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBiZSAKICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBza2lwcGVkIHRlc3Q7IGlmIGZvdW5kIGJlZm9yZSB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgZm91bmQsIAogICAgICAgICAgdGhlIFNraXBUbyBpcyBub3QgYSBtYXRjaAoKICAgIEV4YW1wbGU6OgogICAgICAgIHJlcG9ydCA9ICcnJwogICAgICAgICAgICBPdXRzdGFuZGluZyBJc3N1ZXMgUmVwb3J0IC0gMSBKYW4gMjAwMAoKICAgICAgICAgICAgICAgIyB8IFNldmVyaXR5IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGF5cyBPcGVuCiAgICAgICAgICAgIC0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQogICAgICAgICAgICAgMTAxIHwgQ3JpdGljYWwgfCBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoICAgICAgICAgICAgICAgICB8ICAgICAgICAgIDYKICAgICAgICAgICAgICA5NCB8IENvc21ldGljIHwgU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpICAgICAgICAgfCAgICAgICAgIDE0CiAgICAgICAgICAgICAgNzkgfCBNaW5vciAgICB8IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzIHwgICAgICAgICA0NwogICAgICAgICAgICAnJycKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIFNFUCA9IFN1cHByZXNzKCd8JykKICAgICAgICAjIHVzZSBTa2lwVG8gdG8gc2ltcGx5IG1hdGNoIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIG5leHQgU0VQCiAgICAgICAgIyAtIGlnbm9yZSBxdW90ZWQgc3RyaW5ncywgc28gdGhhdCBhICd8JyBjaGFyYWN0ZXIgaW5zaWRlIGEgcXVvdGVkIHN0cmluZyBkb2VzIG5vdCBtYXRjaAogICAgICAgICMgLSBwYXJzZSBhY3Rpb24gd2lsbCBjYWxsIHRva2VuLnN0cmlwKCkgZm9yIGVhY2ggbWF0Y2hlZCB0b2tlbiwgaS5lLiwgdGhlIGRlc2NyaXB0aW9uIGJvZHkKICAgICAgICBzdHJpbmdfZGF0YSA9IFNraXBUbyhTRVAsIGlnbm9yZT1xdW90ZWRTdHJpbmcpCiAgICAgICAgc3RyaW5nX2RhdGEuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnN0cmlwKSkKICAgICAgICB0aWNrZXRfZXhwciA9IChpbnRlZ2VyKCJpc3N1ZV9udW0iKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoInNldiIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyKCJkYXlzX29wZW4iKSkKICAgICAgICAKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAgICAgICAgICBwcmludCB0a3Qu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DFMAKRRyEQAAAGFLAwAACiAgICBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGFuIGV4cHJlc3Npb24gdG8gYmUgZGVmaW5lZCBsYXRlciAtCiAgICB1c2VkIGZvciByZWN1cnNpdmUgZ3JhbW1hcnMsIHN1Y2ggYXMgYWxnZWJyYWljIGluZml4IG5vdGF0aW9uLgogICAgV2hlbiB0aGUgZXhwcmVzc2lvbiBpcyBrbm93biwgaXQgaXMgYXNzaWduZWQgdG8gdGhlIEN7Rm9yd2FyZH0gdmFyaWFibGUgdXNpbmcgdGhlICc8PCcgb3BlcmF0b3IuCgogICAgTm90ZTogdGFrZSBjYXJlIHdoZW4gYXNzaWduaW5nIHRvIEN7Rm9yd2FyZH0gbm90IHRvIG92ZXJsb29rIHByZWNlZGVuY2Ugb2Ygb3BlcmF0b3JzLgogICAgU3BlY2lmaWNhbGx5LCAnfCcgaGFzIGEgbG93ZXIgcHJlY2VkZW5jZSB0aGFuICc8PCcsIHNvIHRoYXQ6OgogICAgICAgIGZ3ZEV4cHIgPDwgYSB8IGIgfCBjCiAgICB3aWxsIGFjdHVhbGx5IGJlIGV2YWx1YXRlZCBhczo6CiAgICAgICAgKGZ3ZEV4cHIgPDwgYSkgfCBiIHwgYwogICAgdGhlcmVieSBsZWF2aW5nIGIgYW5kIGMgb3V0IGFzIHBhcnNlYWJsZSBhbHRlcm5hdGl2ZXMuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdQogICAgZXhwbGljaXRseSBncm91cCB0aGUgdmFsdWVzIGluc2VydGVkIGludG8gdGhlIEN7Rm9yd2FyZH06OgogICAgICAgIGZ3ZEV4cHIgPDwgKGEgfCBiIHwgYykKICAgIENvbnZlcnRpbmcgdG8gdXNlIHRoZSAnPDw9JyBvcGVyYXRvciBpbnN0ZWFkIHdpbGwgYXZvaWQgdGhpcyBwcm9ibGVtLgoKICAgIFNlZSBMe1BhcnNlUmVzdWx0cy5wcHJpbnR9IGZvciBhbiBleGFtcGxlIG9mIGEgcmVjdXJzaXZlIHBhcnNlciBjcmVhdGVkIHVzaW5nCiAgICBDe0ZvcndhcmR9LgogICAgTmMCAAAAAAAAAAAAAAACAAAABAAAAAMAAABzGAAAAHQAdAF8AIMCagJ8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ZGljdGlvbmFyeS4KICAgIEVhY2ggZWxlbWVudCBjYW4gYWxzbyBiZSByZWZlcmVuY2VkIHVzaW5nIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgZXhwcmVzc2lvbiBhcyBpdHMga2V5LgogICAgVXNlZnVsIGZvciB0YWJ1bGFyIHJlcG9ydCBzY3JhcGluZyB3aGVuIHRoZSBmaXJzdCBjb2x1bW4gY2FuIGJlIHVzZWQgYXMgYSBpdGVtIGtleS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICAKICAgICAgICAjIHByaW50IGF0dHJpYnV0ZXMgYXMgcGxhaW4gZ3JvdXBzCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgaW5zdGVhZCBvZiBPbmVPck1vcmUoZXhwciksIHBhcnNlIHVzaW5nIERpY3QoT25lT3JNb3JlKEdyb3VwKGV4cHIpKSkgLSBEaWN0IHdpbGwgYXV0by1hc3NpZ24gbmFtZXMKICAgICAgICByZXN1bHQgPSBEaWN0KE9uZU9yTW9yZShHcm91cChhdHRyX2V4cHIpKSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKSAgICAgICAgCiAgICAgICAgcHJpbnQocmVzdWx0LmFzRGljdCgpKQogICAgcHJpbnRzOjoKICAgICAgICBbJ3NoYXBlJywgJ1NRVUFSRScsICdwb3NuJywgJ3VwcGVyIGxlZnQnLCAnY29sb3InLCAnbGlnaHQgYmx1ZScsICd0ZXh0dXJlJywgJ2J1cmxhcCddCgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnXSwgWyd0ZXh0dXJlJywgJ2J1cmxhcCddXQogICAgICAgIC0gY29sb3I6IGxpZ2h0IGJsdWUKICAgICAgICAtIHBvc246IHVwcGVyIGxlZnQKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKICAgICAgICAtIHRleHR1cmU6IGJ1cmxhcAogICAgICAgIFNRVUFSRQogICAgICAgIHsnY29sb3InOiAnbGlnaHQgYmx1ZScsICdwb3NuJzogJ3VwcGVyIGxlZnQnLCAndGV4dHVyZSc6ICdidXJsYXAnLCAnc2hhcGUnOiAnU1FVQVJFJ30KICAgIFNlZSBtb3JlIGV4YW1wbGVzIGF0IEx7UGFyc2VSZXN1bHRzfSBvZiBhY2Nlc3NpbmcgZmllbGRzIGJ5IHJlc3VsdHMgbmFtZS4KICAgIGMCAAAAAAAAAAAAAAACAAAAAwAAAAMAAABybgMAAHLfAAAAKQRyjgIAAHINAAAAcq8AAABywQEAAHJvAwAAco8CAAByeQAAAHJ6AAAAcq8AAADvEAAAcnADAAB6DURpY3QuX19pbml0X19jBAAAAAAAAAAAAAAACAAAAAQAAABDAAAAc+oAAAB0AHwDgwFEAF1oXAJ9BH0FdAF8BYMBZAFrAnIPcQR8BWQBGQB9BnQCfAZ0A4MCciB0BHwFZAEZAIMBoAWhAH0GdAF8BYMBZAJrAnIudAZkA3wEgwJ8A3wGPABxBHQBfAWDAWQEawJyRXQCfAVkAhkAdAeDAnNFdAZ8BWQCGQB8BIMCfAN8BjwAcQR8BaAIoQB9B3wHZAE9AHQBfAeDAWQCawNzW3QCfAd0B4MCcmN8B6AJoQByY3QGfAd8BIMCfAN8BjwAcQR0BnwHZAEZAHwEgwJ8A3wGPABxBHwAagpyc3wDZwFTAHwDUwApBU5yAQAAAHKNAAAAcqEAAABycwAAACkLcggBAAByAwEAAHJ9AAAAcnYAAAByiAAAAHK/AAAActIAAAByJAAAAHLzAAAAciwBAABywAEAACkIcq0AAAByjQEAAHKoAAAAcv8BAABy2gAAANoDdG9r2gRpa2V52glkaWN0dmFsdWVyeQAAAHJ5AAAAcnoAAAByAAIAAPMQAABzJAAAABABDAECAQgBCgEQAQwBEAEaARQBCAIGAR4BEAEUAgYCBgEEAnoORGljdC5wb3N0UGFyc2VylAMAAHJ5AAAAcnkAAAByjwIAAHJ6AAAAcg0AAADLEAAAcwgAAAAIAAQBDCMQBHINAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHLMAAAAKQdyLQAAAGFWAgAACiAgICBDb252ZXJ0ZXIgZm9yIGlnbm9yaW5nIHRoZSByZXN1bHRzIG9mIGEgcGFyc2VkIGV4cHJlc3Npb24uCgogICAgRXhhbXBsZTo6CiAgICAgICAgc291cmNlID0gImEsIGIsIGMsZCIKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKQogICAgICAgIHdkX2xpc3QxID0gd2QgKyBaZXJvT3JNb3JlKCcsJyArIHdkKQogICAgICAgIHByaW50KHdkX2xpc3QxLnBhcnNlU3RyaW5nKHNvdXJjZSkpCgogICAgICAgICMgb2Z0ZW4sIGRlbGltaXRlcnMgdGhhdCBhcmUgdXNlZnVsIGR1cmluZyBwYXJzaW5nIGFyZSBqdXN0IGluIHRoZQogICAgICAgICMgd2F5IGFmdGVyd2FyZCAtIHVzZSBTdXBwcmVzcyB0byBrZWVwIHRoZW0gb3V0IG9mIHRoZSBwYXJzZWQgb3V0cHV0CiAgICAgICAgd2RfbGlzdDIgPSB3ZCArIFplcm9Pck1vcmUoU3VwcHJlc3MoJywnKSArIHdkKQogICAgICAgIHByaW50KHdkX2xpc3QyLnBhcnNlU3RyaW5nKHNvdXJjZSkpCiAgICBwcmludHM6OgogICAgICAgIFsnYScsICcsJywgJ2InLCAnLCcsICdjJywgJywnLCAnZCddCiAgICAgICAgWydhJywgJ2InLCAnYycsICdkJ10KICAgIChTZWUgYWxzbyBMe2RlbGltaXRlZExpc3R9LikKICAgIGMEAAAAAAAAAAAAAAAEAAAAAQAAAEMAAABzBAAAAGcAUwByiQAAAHJ5AAAAcv4BAAByeQAAAHJ5AAAAcnoAAAByAAIAAB8RAAByAQIAAHoSU3VwcHJlc3MucG9zdFBhcnNlYwEAAAAAAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAfABTAHKJAAAAcnkAAABytwAAAHJ5AAAAcnkAAAByegAAAHJ0AgAAIhEAAHIBAgAAehFTdXBwcmVzcy5zdXBwcmVzc04pBnKcAAAAcp0AAAByngAAAHLIAAAAcgACAABydAIAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAci0AAAAMEQAAcwgAAAAIAAQBCBIMA3ItAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMoAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGZAeEAFoGZAhTACkJchwAAAB6SQogICAgV3JhcHBlciBmb3IgcGFyc2UgYWN0aW9ucywgdG8gZW5zdXJlIHRoZXkgYXJlIG9ubHkgY2FsbGVkIG9uY2UuCiAgICBjAgAAAAAAAAAAAAAAAgAAAAIAAABDAAAAcxQAAAB0AHwBgwF8AF8BZAF8AF8CZABTAHIjAgAAKQNytQEAANoIY2FsbGFibGXaBmNhbGxlZCkCcq0AAADaCm1ldGhvZENhbGxyeQAAAHJ5AAAAcnoAAAByrwAAACoRAABzBAAAAAoBCgF6EU9ubHlPbmNlLl9faW5pdF9fYwQAAAAAAAAAAAAAAAUAAAAFAAAAQwAAAHMqAAAAfABqAHMPfACgAXwBfAJ8A6EDfQRkAXwAXwB8BFMAdAJ8AXwCZAKDA4IBKQNOVHKhAAAAKQNymQMAAHKYAwAAciEAAAApBXKtAAAAcpAAAABymAEAAHJ4AAAActICAAByeQAAAHJ5AAAAcnoAAABycwIAAC0RAABzCgAAAAYBDgEGAQQBDAF6EU9ubHlPbmNlLl9fY2FsbF9fYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMKAAAAZAF8AF8AZABTAHIjAgAAKQFymQMAAHK3AAAAcnkAAAByeQAAAHJ6AAAA2gVyZXNldDMRAABy0QAAAHoOT25seU9uY2UucmVzZXROKQdynAAAAHKdAAAAcp4AAAByyAAAAHKvAAAAcnMCAABymwMAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAchwAAAAmEQAAcwoAAAAIAAQBCAMIAwwGchwAAABjAQAAAAAAAAAAAAAAAgAAAAgAAAADAAAAczgAAAB0AIgAgwGJAIcAZgFkAWQChAh9AXoHiABqAXwBXwFXAHwBUwAEAHQCeRsBAAEAAQBZAHwBUwB3ACkDYXQDAAAKICAgIERlY29yYXRvciBmb3IgZGVidWdnaW5nIHBhcnNlIGFjdGlvbnMuIAogICAgCiAgICBXaGVuIHRoZSBwYXJzZSBhY3Rpb24gaXMgY2FsbGVkLCB0aGlzIGRlY29yYXRvciB3aWxsIHByaW50IEN7Ij4+IGVudGVyaW5nIEl7bWV0aG9kLW5hbWV9KGxpbmU6SXtjdXJyZW50X3NvdXJjZV9saW5lfSwgSXtwYXJzZV9sb2NhdGlvbn0sIEl7bWF0Y2hlZF90b2tlbnN9KSIufQogICAgV2hlbiB0aGUgcGFyc2UgYWN0aW9uIGNvbXBsZXRlcywgdGhlIGRlY29yYXRvciB3aWxsIHByaW50IEN7Ijw8In0gZm9sbG93ZWQgYnkgdGhlIHJldHVybmVkIHZhbHVlLCBvciBhbnkgZXhjZXB0aW9uIHRoYXQgdGhlIHBhcnNlIGFjdGlvbiByYWlzZWQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgd2QgPSBXb3JkKGFscGhhcykKCiAgICAgICAgQHRyYWNlUGFyc2VBY3Rpb24KICAgICAgICBkZWYgcmVtb3ZlX2R1cGxpY2F0ZV9jaGFycyh0b2tlbnMpOgogICAgICAgICAgICByZXR1cm4gJycuam9pbihzb3J0ZWQoc2V0KCcnLmpvaW4odG9rZW5zKSkpKQoKICAgICAgICB3ZHMgPSBPbmVPck1vcmUod2QpLnNldFBhcnNlQWN0aW9uKHJlbW92ZV9kdXBsaWNhdGVfY2hhcnMpCiAgICAgICAgcHJpbnQod2RzLnBhcnNlU3RyaW5nKCJzbGtkanMgc2xkIHNsZGQgc2RsZiBzZGxqZiIpKQogICAgcHJpbnRzOjoKICAgICAgICA+PmVudGVyaW5nIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnMobGluZTogJ3Nsa2RqcyBzbGQgc2xkZCBzZGxmIHNkbGpmJywgMCwgKFsnc2xrZGpzJywgJ3NsZCcsICdzbGRkJywgJ3NkbGYnLCAnc2RsamYnXSwge30pKQogICAgICAgIDw8bGVhdmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzIChyZXQ6ICdkZmprbHMnKQogICAgICAgIFsnZGZqa2xzJ10KICAgIGMAAAAAAAAAAAAAAAAHAAAACgAAABcAAABzqgAAAIgAagB9AXwAZAFkAIUCGQBcA30CfQN9BHQBfACDAWQCawRyHHwAZAMZAGoCagBkBBcAfAEXAH0BdANqBKAFZAV8AXQGfAN8AoMCfAN8BGYEFgChAQEAegaIAHwAjgB9BVcAbhcEAHQHeUgBAH0GAQB6C3QDagSgBWQGfAF8BmYCFgChAQEAggBkAH0GfgZ3AXcAdANqBKAFZAd8AXwFZgIWAKEBAQB8BVMAKQhOcpwBAABycQAAAHIBAAAA2gEueiI+PmVudGVyaW5nICVzKGxpbmU6ICclcycsICVkLCAlcikKeh08PGxlYXZpbmcgJXMgKGV4Y2VwdGlvbjogJXMpCnoXPDxsZWF2aW5nICVzIChyZXQ6ICVyKQopCHKcAAAAcgMBAAByrgEAAHKCAAAA2gZzdGRlcnLaBXdyaXRlckkAAABysQEAACkH2gZwYUFyZ3PaCHRoaXNGdW5jcpAAAABymAEAAHJ4AAAAcocAAABylAEAAKkBcosCAAByeQAAAHJ6AAAA2gF6TBEAAHMcAAAABgESAQwBFAEeAQIBDAEOARQBAgEIgAL+FAMEAXobdHJhY2VQYXJzZUFjdGlvbi48bG9jYWxzPi56KQNytQEAAHKcAAAAcrQAAAApAnKLAgAAcqIDAAByeQAAAHKhAwAAcnoAAAByZAAAADYRAABzEgAAAAgVDAECDQoBBAMM/gIBBAEC/nJkAAAA+gEsRmMDAAAAAAAAAAAAAAAEAAAABQAAAEMAAABzXAAAAHQAfACDAWQBFwB0AHwBgwEXAGQCFwB0AHwAgwEXAGQDFwB9A3wCciF0AXwAdAJ8AXwAFwCDARcAgwGgA3wDoQFTAHwAdAJ0BHwBgwF8ABcAgwEXAKADfAOhAVMAKQRhxwIAAAogICAgSGVscGVyIHRvIGRlZmluZSBhIGRlbGltaXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIC0gdGhlIGRlbGltaXRlciBkZWZhdWx0cyB0byAnLCcuCiAgICBCeSBkZWZhdWx0LCB0aGUgbGlzdCBlbGVtZW50cyBhbmQgZGVsaW1pdGVycyBjYW4gaGF2ZSBpbnRlcnZlbmluZyB3aGl0ZXNwYWNlLCBhbmQKICAgIGNvbW1lbnRzLCBidXQgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIEN7Y29tYmluZT1UcnVlfSBpbiB0aGUgY29uc3RydWN0b3IuCiAgICBJZiBDe2NvbWJpbmV9IGlzIHNldCB0byBDe1RydWV9LCB0aGUgbWF0Y2hpbmcgdG9rZW5zIGFyZSByZXR1cm5lZCBhcyBhIHNpbmdsZSB0b2tlbgogICAgc3RyaW5nLCB3aXRoIHRoZSBkZWxpbWl0ZXJzIGluY2x1ZGVkOyBvdGhlcndpc2UsIHRoZSBtYXRjaGluZyB0b2tlbnMgYXJlIHJldHVybmVkCiAgICBhcyBhIGxpc3Qgb2YgdG9rZW5zLCB3aXRoIHRoZSBkZWxpbWl0ZXJzIHN1cHByZXNzZWQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGVsaW1pdGVkTGlzdChXb3JkKGFscGhhcykpLnBhcnNlU3RyaW5nKCJhYSxiYixjYyIpICMgLT4gWydhYScsICdiYicsICdjYyddCiAgICAgICAgZGVsaW1pdGVkTGlzdChXb3JkKGhleG51bXMpLCBkZWxpbT0nOicsIGNvbWJpbmU9VHJ1ZSkucGFyc2VTdHJpbmcoIkFBOkJCOkNDOkREOkVFIikgIyAtPiBbJ0FBOkJCOkNDOkREOkVFJ10KICAgIHoCIFtynQIAAHJ/AwAAKQVyiAAAAHIMAAAAcjQAAABy1QEAAHItAAAAKQRyjgEAANoFZGVsaW3aB2NvbWJpbmXaBmRsTmFtZXJ5AAAAcnkAAAByegAAAHJCAAAAYhEAAHMIAAAAJA0EARoBGgJyQgAAAGMCAAAAAAAAAAAAAAADAAAABQAAAAMAAABzagAAAHQAgwCJAIcAhwFmAmQBZAKECH0CfAFkA3UAchh0AXQCgwGgA2QEZAWEAKEBfQFuBHwBoAShAH0BfAGgBWQGoQEBAHwBagZ8AmQHZAiNAgEAfAGIABcAoAVkCXQHiAGDARcAZAoXAKEBUwApC2E6AwAACiAgICBIZWxwZXIgdG8gZGVmaW5lIGEgY291bnRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLgogICAgVGhpcyBoZWxwZXIgZGVmaW5lcyBhIHBhdHRlcm4gb2YgdGhlIGZvcm06OgogICAgICAgIGludGVnZXIgZXhwciBleHByIGV4cHIuLi4KICAgIHdoZXJlIHRoZSBsZWFkaW5nIGludGVnZXIgdGVsbHMgaG93IG1hbnkgZXhwciBleHByZXNzaW9ucyBmb2xsb3cuCiAgICBUaGUgbWF0Y2hlZCB0b2tlbnMgcmV0dXJucyB0aGUgYXJyYXkgb2YgZXhwciB0b2tlbnMgYXMgYSBsaXN0IC0gdGhlIGxlYWRpbmcgY291bnQgdG9rZW4gaXMgc3VwcHJlc3NlZC4KICAgIAogICAgSWYgQ3tpbnRFeHByfSBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uIHRoYXQgcHJvZHVjZXMgYW4gaW50ZWdlciB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpKS5wYXJzZVN0cmluZygnMiBhYiBjZCBlZicpICAjIC0+IFsnYWInLCAnY2QnXQoKICAgICAgICAjIGluIHRoaXMgcGFyc2VyLCB0aGUgbGVhZGluZyBpbnRlZ2VyIHZhbHVlIGlzIGdpdmVuIGluIGJpbmFyeSwKICAgICAgICAjICcxMCcgaW5kaWNhdGluZyB0aGF0IDIgdmFsdWVzIGFyZSBpbiB0aGUgYXJyYXkKICAgICAgICBiaW5hcnlDb25zdGFudCA9IFdvcmQoJzAxJykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHQ6IGludCh0WzBdLCAyKSkKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpLCBpbnRFeHByPWJpbmFyeUNvbnN0YW50KS5w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biBpbmNsdWRlIGRlbGltaXRpbmcgbWFya2VycyBvciBwdW5jdHVhdGlvbiwKICAgIGFzIGxvbmcgYXMgdGhleSBhcmUgc3VwcHJlc3NlZCwgdGhlcmVieSBsZWF2aW5nIHRoZSBzaWduaWZpY2FudCBrZXkgdGV4dC4gIFRoZSB2YWx1ZQogICAgcGF0dGVybiBjYW4gaW5jbHVkZSBuYW1lZCByZXN1bHRzLCBzbyB0aGF0IHRoZSBDe0RpY3R9IHJlc3VsdHMgY2FuIGluY2x1ZGUgbmFtZWQgdG9rZW4KICAgIGZpZWxkcy4KCiAgICBFeGFtcGxlOjoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKICAgICAgICAKICAgICAgICBhdHRyX2xhYmVsID0gbGFiZWwKICAgICAgICBhdHRyX3ZhbHVlID0gU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pCgogICAgICAgICMgc2ltaWxhciB0byBEaWN0LCBidXQgc2ltcGxlciBjYWxsIGZvcm1hdAogICAgICAgIHJlc3VsdCA9IGRpY3RPZihhdHRyX2xhYmVsLCBhdHRyX3ZhbHVlKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5zaGFwZSkgICMgb2JqZWN0IGF0dHJpYnV0ZSBhY2Nlc3Mgd29ya3MgdG9vCiAgICAgICAgcHJpbnQocmVzdWx0LmFz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ICAgICAgICcnJykKICAgICAgICAKICAgICAgICB1cHBlcndvcmQgPSBXb3JkKGFscGhhcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnVwcGVyKSkKICAgICAgICBPbmVPck1vcmUodXBwZXJ3b3JkKS5ydW5UZXN0cygnJycKICAgICAgICAgICAgbXkga2luZ2RvbSBmb3IgYSBob3JzZQogICAgICAgICAgICAnJycpCgogICAgICAgIHdkID0gV29yZChhbHBoYXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci50aXRsZSkpCiAgICAgICAgT25lT3JNb3JlKHdkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikucnVuVGVzdHMoJycnCiAgICAgICAgICAgIG5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50IG1hZGUgZ2xvcmlvdXMgc3VtbWVyIGJ5IHRoaXMgc3VuIG9mIHlvcmsKICAgICAgICAgICAgJycnKQogICAgcHJpbnRzOjoKICAgICAgICAwMCAxMSAyMiBhYSBGRiAwYSAwZCAxYQogICAgICAgIFswLCAxNywgMzQsIDE3MCwgMjU1LCAxMCwgMTMsIDI2XQoKICAgICAgICBteSBraW5nZG9tIGZvciBhIGhvcnNlCiAgICAgICAgWydNWScsICdLSU5HRE9NJywgJ0ZPUicsICdBJywgJ0hPUlNFJ10KCiAgICAgICAgbm93IGlzIHRoZSB3aW50ZXIgb2Ygb3VyIGRpc2NvbnRlbnQgbWFkZSBnbG9yaW91cyBzdW1tZXIgYnkgdGhpcyBzdW4gb2YgeW9yawogICAgICAgIFsnTm93IElzIFRoZSBXaW50ZXIgT2YgT3VyIERpc2NvbnRlbnQgTWFkZSBHbG9yaW91cyBTdW1tZXIgQnkgVGhpcyBTdW4gT2YgWW9yayddCiAgICBjAwAAAAAAAAAAAAAAAwAAAAMAAAATAAAAcxQAAACHAIcBZgJkAWQChAh8AkQAgwFTACkDTmMBAAAAAAAAAAAAAAACAAAABQAAABMAAABzHAAAAGcAfABdCn0BiAF8AWcBiACiAVIAjgCRAnECUwByeQAAAHJ5AAAAKQJyigAAANoEdG9rbqkCcqwAAABy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ZXhwcmVzc2lvbnMgZm9yIEhUTUwsIGdpdmVuIGEgdGFnIG5hbWUuIE1hdGNoZXMKICAgIHRhZ3MgaW4gZWl0aGVyIHVwcGVyIG9yIGxvd2VyIGNhc2UsIGF0dHJpYnV0ZXMgd2l0aCBuYW1lc3BhY2VzIGFuZCB3aXRoIHF1b3RlZCBvciB1bnF1b3RlZCB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CiAgICAgICAgdGV4dCA9ICc8dGQ+TW9yZSBpbmZvIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vcHlwYXJzaW5nLndpa2lzcGFjZXMuY29tIj5weXBhcnNpbmc8L2E+IHdpa2kgcGFnZTwvdGQ+JwogICAgICAgICMgbWFrZUhUTUxUYWdzIHJldHVybnMgcHlwYXJzaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIGFzIGEgMi10dXBsZQogICAgICAgIGEsYV9lbmQgPSBtYWtlSFRNTFRhZ3MoIkEiKQogICAgICAgIGxpbmtfZXhwciA9IGEgKyBTa2lwVG8oYV9lbmQpKCJsaW5rX3RleHQiKSArIGFfZW5kCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmsgaW4gbGlua19leHByLnNlYXJjaFN0cmluZyh0ZXh0KToKICAgICAgICAgICAgIyBhdHRyaWJ1dGVzIGluIHRoZSA8QT4gdGFnIChsaWtlICJocmVmIiBzaG93biBoZXJlKSBhcmUgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKICAgIHByaW50czo6CiAgICAgICAgcHlwYXJzaW5nIC0+IGh0dHA6Ly9weXBhcnNpbmcud2lraXNwYWNlcy5jb20KICAgIEapAXIABAAAqQFy+QMAAHJ5AAAAcnkAAAByegAAAHJNAAAAKBMAAHMCAAAAChFyTQAAAGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAAByAQQAACkCeroKICAgIEhlbHBlciB0byBjb25zdHJ1Y3Qgb3BlbmluZyBhbmQgY2xvc2luZyB0YWcgZXhwcmVzc2lvbnMgZm9yIFhNTCwgZ2l2ZW4gYSB0YWcgbmFtZS4gTWF0Y2hlcwogICAgdGFncyBvbmx5IGluIHRoZSBnaXZlbiB1cHBlci9sb3dlciBjYXNlLgoKICAgIEV4YW1wbGU6IHNpbWlsYXIgdG8gTHttYWtlSFRNTFRhZ3N9CiAgICBUcgIEAAByAwQAAHJ5AAAAcnkAAAByegAAAHJOAAAAOxMAAHMCAAAACgdyTgAAAGMAAAAAAAAAAAAAAAADAAAAAwAAAA8AAABzOAAAAHwAcgl8AGQBZAGFAhkAiQBuBHwBoAChAIkAZAJkA4QAiABEAIMBiQCHAGYBZARkBYQIfQJ8AlMAKQZhPAgAAAogICAgSGVscGVyIHRvIGNyZWF0ZSBhIHZhbGlkYXRpbmcgcGFyc2UgYWN0aW9uIHRvIGJlIHVzZWQgd2l0aCBzdGFydCB0YWdzIGNyZWF0ZWQKICAgIHdpdGggQ3tMe21ha2VYTUxUYWdzfX0gb3IgQ3tMe21ha2VIVE1MVGFnc319LiBVc2UgQ3t3aXRoQXR0cmlidXRlfSB0byBxdWFsaWZ5IGEgc3RhcnRpbmcgdGFnCiAgICB3aXRoIGEgcmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlLCB0byBhdm9pZCBmYWxzZSBtYXRjaGVzIG9uIGNvbW1vbiB0YWdzIHN1Y2ggYXMKICAgIEN7PFREPn0gb3IgQ3s8RElWPn0uCgogICAgQ2FsbCBDe3dpdGhBdHRyaWJ1dGV9IHdpdGggYSBzZXJpZXMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuIFNwZWNpZnkgdGhlIGxpc3QKICAgIG9mIGZpbHRlciBhdHRyaWJ1dGVzIG5hbWVzIGFuZCB2YWx1ZXMgYXM6CiAgICAgLSBrZXl3b3JkIGFyZ3VtZW50cywgYXMgaW4gQ3soYWxpZ249InJpZ2h0Iil9LCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIEN7Kip9IG9wZXJhdG9yLCB3aGVuIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIGFsc28gYSBQeXRob24KICAgICAgICAgIHJlc2VydmVkIHdvcmQsIGFzIGluIEN7Kip7ImNsYXNzIjoiQ3VzdG9tZXIiLCAiYWxpZ24iOiJyaWdodCJ9fQogICAgIC0gYSBsaXN0IG9mIG5hbWUtdmFsdWUgdHVwbGVzLCBhcyBpbiAoICgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwicmlnaHQiKSApCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZCBmb3JtLiAgQXR0cmlidXRlCiAgICBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgogICAgICAgCiAgICBJZiBqdXN0IHRlc3RpbmcgZm9yIEN7Y2xhc3N9ICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UgQ3tMe3dpdGhDbGFzc319LgoKICAgIFRvIHZlcmlmeSB0aGF0IHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBidXQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdmFsdWUsIHBhc3MKICAgIEN7d2l0aEF0dHJpYnV0ZS5BTllfVkFMVUV9IGFzIHRoZSB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKCiAgICAgICAgIyBvbmx5IG1hdGNoIGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAiZ3JpZCIKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT0iZ3JpZCIpKQogICAg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CGoNfA8XAIMBdAh8CHwPFwCDARcAfRBuUHwJZAdrAnL2fAhkAnUBcud0B3wFfAgXAHwPFwCDAXQIfAV0CXwIfA8XAIMBFwCDARcAfRBuNXQHfAV8DxcAgwF0CHwFdAl8D4MBFwCDARcAfRBuJnwJZARrApABchR0B3wFfA0XAHwPFwB8DhcAfA8XAIMBdAh8BXwNFwB8DxcAfA4XAHwPFwCDARcAfRBuCHQDZAqDAYIBdANkC4MBggF8C5ABcjJ0C3wLdA50D2YCgwKQAXItfBBqEHwLjgABAG4FfBCgEHwLoQEBAHwPfBCgBHwMoQF8BUIASwB9D3wPfQVxD3wEfAVLAH0EfARTACkMYUQKAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGNvbnN0cnVjdGluZyBncmFtbWFycyBvZiBleHByZXNzaW9ucyBtYWRlIHVwIG9mCiAgICBvcGVyYXRvcnMgd29ya2luZyBpbiBhIHByZWNlZGVuY2UgaGllcmFyY2h5LiAgT3BlcmF0b3JzIG1heSBiZSB1bmFyeSBvcgogICAgYmluYXJ5LCBsZWZ0LSBvciByaWdodC1hc3NvY2lhdGl2ZS4gIFBhcnNlIGFjdGlvbnMgY2FuIGFsc28gYmUgYXR0YWNoZWQKICAgIHRvIG9wZXJhdG9yIGV4cHJlc3Npb25zLiBUaGUgZ2VuZXJhdGVkIHBhcnNlciB3aWxsIGFsc28gcmVjb2duaXplIHRoZSB1c2UgCiAgICBvZiBwYXJlbnRoZXNlcyB0byBvdmVycmlkZSBvcGVyYXRvciBwcmVjZWRlbmNlcyAoc2VlIGV4YW1wbGUgYmVsb3cpLgogICAgCiAgICBOb3RlOiBpZiB5b3UgZGVmaW5lIGEgZGVlcCBvcGVyYXRvciBsaXN0LCB5b3UgbWF5IHNlZSBwZXJmb3JtYW5jZSBpc3N1ZXMKICAgIHdoZW4gdXNpbmcgaW5maXhOb3RhdGlvbi4gU2VlIEx7UGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0fSBmb3IgYQogICAgbWVjaGFuaXNtIHRvIHBvdGVudGlhbGx5IGltcHJvdmUgeW91ciBwYXJzZXIgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGJhc2VFeHByIC0gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG1vc3QgYmFzaWMgZWxlbWVudCBmb3IgdGhlIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsIGluIHRoZQogICAgICBleHByZXNzaW9uIGdyYW1tYXI7IGVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm0KICAgICAgKG9wRXhwciwgbnVtVGVybXMsIHJpZ2h0TGVmdEFzc29jLCBwYXJzZUFjdGlvbiksIHdoZXJlOgogICAgICAgLSBvcEV4cHIgaXMgdGhlIHB5cGFyc2luZyBleHByZXNzaW9uIGZvciB0aGUgb3BlcmF0b3I7CiAgICAgICAgICBtYXkgYWxzbyBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOwogICAgICAgICAgaWYgbnVtVGVybXMgaXMgMywgb3BFeHByIGlzIGEgdHVwbGUgb2YgdHdvIGV4cHJlc3Npb25zLCBmb3IgdGhlCiAgICAgICAgICB0d28gb3BlcmF0b3JzIHNlcGFyYXRpbmcgdGhlIDMgdGVybXMKICAgICAgIC0gbnVtVGVybXMgaXMgdGhlIG51bWJlciBvZiB0ZXJtcyBmb3IgdGhpcyBvcGVyYXRvciAobXVzdAogICAgICAgICAgYmUgMSwgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcwogICAgICAgICAgcmlnaHQgb3IgbGVmdCBhc3NvY2lhdGl2ZSwgdXNpbmcgdGhlIHB5cGFyc2luZy1kZWZpbmVkCiAgICAgICAgICBjb25zdGFudHMgQ3tvcEFzc29jLlJJR0hUfSBhbmQgQ3tvcEFzc29jLkxFRlR9LgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhpcyBvcGVyYXRvciBleHByZXNzaW9uICh0aGUKICAgICAgICAgIHBhcnNlIGFjdGlvbiB0dXBsZSBtZW1iZXIgbWF5IGJlIG9taXR0ZWQpOyBpZiB0aGUgcGFyc2UgYWN0aW9uCiAgICAgICAgICBpcyBwYXNzZWQgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvCiAgICAgICAgICBjYWxsaW5nIEN7c2V0UGFyc2VBY3Rpb24oKmZuKX0gKEx7UGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbn0pCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcoJyl9KQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzIChkZWZhdWx0PUN7U3VwcHJlc3MoJyknKX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBzaW1wbGUgZXhhbXBsZSBvZiBmb3VyLWZ1bmN0aW9uIGFyaXRobWV0aWMgd2l0aCBpbnRzIGFuZCB2YXJpYWJsZSBuYW1lcwogICAgICAgIGludGVnZXIgPSBweXBhcnNpbmdfY29tbW9uLnNpZ25lZF9pbnRlZ2VyCiAgICAgICAgdmFybmFtZSA9IHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllciAKICAgICAgICAKICAgICAgICBhcml0aF9leHByID0gaW5maXhOb3RhdGlvbihpbnRlZ2VyIHwgdmFybmFtZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAoJy0nLCAxLCBvcEFzc29jLlJJR0hUKSwKICAgICAgICAgICAgKG9uZU9mKCcqIC8nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgKG9uZU9mKCcrIC0nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgXSkKICAgICAgICAKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAoNSszKSo2CiAgICAgICAgICAgIC0yLS0x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eXBhcnNpbmcgZXhwcmVzc2lvbgogICAgIC0gY29udGVudCAtIGV4cHJlc3Npb24gZm9yIGl0ZW1zIHdpdGhpbiB0aGUgbmVzdGVkIGxpc3RzIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgLSBpZ25vcmVFeHByIC0gZXhwcmVzc2lvbiBmb3IgaWdub3Jpbmcgb3BlbmluZyBhbmQgY2xvc2luZyBkZWxpbWl0ZXJzIChkZWZhdWx0PUN7cXVvdGVkU3RyaW5nfSkKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZSBuZXN0ZWQKICAgIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50IGJldHdlZW4gZGVsaW1pdGVycwogICAgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIEN7aWdub3JlRXhwcn0gYXJndW1lbnQgdG8gZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgbWF5IGNvbnRhaW4KICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIG9wZW5pbmcKICAgIG9yIGNsb3NpbmcgY2hhcmFjdGVycyBmb3IgbmVzdGluZywgc3VjaCBhcyBxdW90ZWRTdHJpbmcgb3IgYSBjb21tZW50CiAgICBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbiBDe0x7T3J9fSBvciBDe0x7TWF0Y2hGaXJzdH19LgogICAgVGhlIGRlZmF1bHQgaXMgTHtxdW90ZWRTdHJpbmd9LCBidXQgaWYgbm8gZXhwcmVzc2lvbnMgYXJlIHRvIGJlIGlnbm9yZWQsCiAgICB0aGVuIHBhc3MgQ3tOb25lfSBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3R5cGUgPSBvbmVPZigidm9pZCBpbnQgc2hvcnQgbG9uZyBjaGFyIGZsb2F0IGRvdWJsZSIpCiAgICAgICAgZGVjbF9kYXRhX3R5cGUgPSBDb21iaW5lKGRhdGFfdHlwZSArIE9wdGlvbmFsKFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsUlBBUiA9IG1hcChTdXBwcmVzcywgIigpIikKCiAgICAgICAgY29kZV9ib2R5ID0gbmVzdGVkRXhwcigneycsICd9JywgaWdub3JlRXhwcj0ocXVvdGVkU3RyaW5nIHwgY1N0eWxlQ29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKSAKICAgICAgICAgICAgICAgICAgICAgICsgaWRlbnQoIm5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgKyBMUEFSICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChhcmcpLCBbXSkoImFyZ3MiKSArIFJQQVIgCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCiAgICAgICAgCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgeyAKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7IAogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcmQoaGNoYXIpLW9yZCgnMCcpKTsgCiAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEwK29yZChoY2hhciktb3JkKCdBJykpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfQogICAgICAgICcnJwogICAgICAgIGZvciBmdW5jIGluIGNfZnVuY3Rpb24uc2VhcmNoU3RyaW5nKHNvdXJjZV9jb2RlKToKICAgICAgICAgICAgcHJpbnQoIiUobmFtZSlzICglKHR5cGUpcykgYXJnczogJShhcmdzKXMiICUgZnVuYykKCiAgICBwcmludHM6OgogICAgICAgIGlzX29kZCAoaW50KSBhcmdzOiBbWydpbnQnLCAneCddXQogICAgICAgIGRlY190b19oZXggKGludCkgYXJnczogW1snY2hhcicsICdoY2hhciddXQogICAgei5vcGVuaW5nIGFuZCBjbG9zaW5nIHN0cmluZ3MgY2Fubm90IGJlIHRoZSBzYW1lTnKNAAAActcDAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAA8wwAAAB8AGQBGQCgAKEAUwBy3AAAAKkBcr8AAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAZxQAAHKqAwAAehxuZXN0ZWRFeHByLjxsb2NhbHM+LjxsYW1iZGE+YwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHIhBAAActwAAAByIgQAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAABqFAAAcqoDAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAciEEAABy3AAAAHIiBAAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAAHAUAAByqgMAAGMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAAByIQQAAHLcAAAAciIEAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAdBQAAHKqAwAAek9vcGVuaW5nIGFuZCBjbG9zaW5nIGFyZ3VtZW50cyBtdXN0IGJlIHN0cmluZ3MgaWYgbm8gY29udGVudCBleHByZXNzaW9uIGlzIGdpdmVuehZuZXN0ZWQgJXMlcyBleHByZXNzaW9uKRJyZgIAAHJ9AAAAcvIAAAByAwEAAHIMAAAAchsAAAByCwAAAHImAAAAcrcBAAByhAAAAHJFAAAAcvMAAAByFwAAAHIRAAAAchMAAAByLQAAAHI0AAAActUBAAApBdoGb3BlbmVy2gZjbG9zZXLaB2NvbnRlbnRyggMAAHKHAAAAcnkAAAByeQAAAHJ6AAAAclIAAAAlFAAAc0gAAAAIOggBCAEUARgBCAEIARQBBv8KAgT+FgQKAQb/CAMIAQgBAv8IAQL/DAIG/goDBP0WBQwBBv8KAgT+CAQGAQgBKgEkAhIBBAFyUgAAAGMDAAAAAAAAAAAAAAALAAAABgAAAAMAAABz5AAAAIcAZgFkAWQChAh9A4cAZgFkA2QEhAh9BIcAZgFkBWQGhAh9BXQAdAGDAKACZAehAaADoQCDAX0GdASDAHQEgwCgBXwEoQEXAKAGZAihAX0HdASDAKAFfAOhAaAGZAmhAX0IdASDAKAFfAWhAaAGZAqhAX0JfAJyU3QHdAh8BoMBfAcXAHQAfAh0B3wAgwEXAHQIfAaDARcAgwEXAHwJFwCDAX0KbhJ0B3QIfAaDAXQAfAh0B3wAgwEXAHQIfAaDARcAgwEXAIMBfQp8AKAJdAp0AYMAFwChAQEAfAqgBmQLoQFTACkMYQoJAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIHNwYWNlLWRlbGltaXRlZCBpbmRlbnRhdGlvbiBibG9ja3MsIHN1Y2ggYXMKICAgIHRob3NlIHVzZWQgdG8gZGVmaW5lIGJsb2NrIHN0YXRlbWVudHMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBibG9ja1N0YXRlbWVudEV4cHIgLSBleHByZXNzaW9uIGRlZmluaW5nIHN5bnRheCBvZiBzdGF0ZW1lbnQgdGhhdAogICAgICAgICAgICBpcyByZXBlYXRlZCB3aXRoaW4gdGhlIGluZGVudGVkIGJsb2NrCiAgICAgLSBpbmRlbnRTdGFjayAtIGxpc3QgY3JlYXRlZCBieSBjYWxsZXIgdG8gbWFuYWdlIGluZGVudGF0aW9uIHN0YWNrCiAgICAgICAgICAgIChtdWx0aXBsZSBzdGF0ZW1lbnRXaXRoSW5kZW50ZWRCbG9jayBleHByZXNzaW9ucyB3aXRoaW4gYSBzaW5nbGUgZ3JhbW1hcgogICAgICAgICAgICBzaG91bGQgc2hhcmUgYSBjb21tb24gaW5kZW50U3RhY2spCiAgICAgLSBpbmRlbnQgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBibG9jayBtdXN0IGJlIGluZGVudGVkIGJleW9uZCB0aGUKICAgICAgICAgICAgdGhlIGN1cnJlbnQgbGV2ZWw7IHNldCB0byBGYWxzZSBmb3IgYmxvY2sgb2YgbGVmdC1tb3N0IHN0YXRlbWVudHMKICAgICAgICAgICAgKGRlZmF1bHQ9Q3tUcnVlfSkKCiAgICBBIHZhbGlkIGJsb2NrIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgQ3tibG9ja1N0YXRlbWVudH0uCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YSA9ICcnJwogICAgICAgIGRlZiBBKHopOgogICAgICAgICAgQTEKICAgICAgICAgIEIgPSAxMDAKICAgICAgICAgIEcgPSBBMgogICAgICAgICAgQTIKICAgICAgICAgIEEzCiAgICAgICAgQgogICAgICAgIGRlZiBCQihhLGIsYyk6CiAgICAgICAgICBCQjEKICAgICAgICAgIGRlZiBCQkEoKToKICAgICAgICAgICAgYmJhMQogICAgICAgICAgICBiYmEyCiAgICAgICAgICAgIGJiYTMKICAgICAgICBDCiAgICAgICAgRAogICAgICAgIGRlZiBzcGFtKHgseSk6CiAgICAgICAgICAgICBkZWYgZWdncyh6KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgJycnCgoKICAgICAgICBpbmRlbnRTdGFjayA9IFsxXQogICAgICAgIHN0bXQgPSBGb3J3YXJkKCkKCiAgICAgICAgaWRlbnRpZmllciA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgZnVuY0RlY2wgPSAoImRlZiIgKyBpZGVudGlmaWVyICsgR3JvdXAoICIoIiArIE9wdGlvbmFsKCBkZWxpbWl0ZWRMaXN0KGlkZW50aWZpZXIpICkgKyAiKSIgKSArICI6IikKICAgICAgICBmdW5jX2JvZHkgPSBpbmRlbnRlZEJsb2NrKHN0bXQsIGluZGVudFN0YWNrKQogICAgICAgIGZ1bmNEZWYgPSBHcm91cCggZnVuY0RlY2wgKyBmdW5jX2JvZHkgKQoKICAgICAgICBydmFsdWUgPSBGb3J3YXJkKCkKICAgICAgICBmdW5jQ2FsbCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHJ2YWx1ZSkpICsgIikiKQogICAgICAgIHJ2YWx1ZSA8PCAoZnVuY0NhbGwgfCBpZGVudGlmaWVyIHwgV29yZChudW1zKSkKICAgICAgICBhc3NpZ25tZW50ID0gR3JvdXAoaWRlbnRpZmllciArICI9IiArIHJ2YWx1ZSkKICAgICAgICBzdG10IDw8ICggZnVuY0RlZiB8IGFzc2lnbm1lbnQgfCBpZGVudGlmaWVyICkKCiAgICAgICAgbW9kdWxlX2JvZHkgPSBPbmVPck1vcmUoc3RtdCkKCiAgICAgICAgcGFyc2VUcmVlID0gbW9kdWxlX2JvZHkucGFyc2VTdHJpbmcoZGF0YSkKICAgICAgICBwYXJzZVRyZWUucHByaW50KCkKICAgIHByaW50czo6CiAgICAgICAgW1snZGVmJywKICAgICAgICAgICdBJywKICAgICAgICAgIFsnKCcsICd6JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0ExJ10sIFtbJ0InLCAnPScsICcxMDAnXV0sIFtbJ0cnLCAnPScsICdBMiddXSwgWydBMiddLCBbJ0EzJ11dXSwKICAgICAgICAgJ0InLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnQkInLAogICAgICAgICAgWycoJywgJ2EnLCAnYicsICdjJywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0JCMSddLCBbWydkZWYnLCAnQkJBJywgWycoJywgJyknXSwgJzonLCBbWydiYmExJ10sIFsnYmJhMiddLCBbJ2JiYTMnXV1dXV1dLAogICAgICAgICAnQycsCiAgICAgICAgICdEJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ3NwYW0nLAogICAgICAgICAgWycoJywgJ3gnLCAneScsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbW1snZGVmJywgJ2VnZ3MnLCBbJygnLCAneicsICcpJ10sICc6JywgW1sn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U084NjAxIEx7ZGF0ZXM8aXNvODYwMV9kYXRlPn0gYW5kIEx7ZGF0ZXRpbWU8aXNvODYwMV9kYXRldGltZT59CiAgICAgLSBMe1VVSUQ8dXVpZD59CiAgICAgLSBMe2NvbW1hLXNlcGFyYXRlZCBsaXN0PGNvbW1hX3NlcGFyYXRlZF9saXN0Pn0KICAgIFBhcnNlIGFjdGlvbnM6CiAgICAgLSBDe0x7Y29udmVydFRvSW50ZWdlcn19CiAgICAgLSBDe0x7Y29udmVydFRvRmxvYXR9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV0aW1lfX0KICAgICAtIEN7THtzdHJpcEhUTUxUYWdzfX0KICAgICAtIEN7THt1cGNhc2VUb2tlbnN9fQogICAgIC0gQ3tMe2Rvd25jYXNlVG9rZW5zfX0KCiAgICBFeGFtcGxlOjoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uaGV4X2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIEZGCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mcmFjdGlvbi5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm1peGVkX2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgICAgIDEKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgMS0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBpbXBvcnQgdXVpZAogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcCh1dWlkLlVVSUQpKQogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB1dWlkCiAgICAgICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgICAgICAnJycpCiAgICBwcmludHM6OgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgIDEwMAogICAgICAgIFsyNTZdCgogICAgICAgIEZGCiAgICAgICAgWzI1NV0KCiAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgIDEKICAgICAgICBbMV0KCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgMS0zLzQKICAgICAgICBbMS43NV0KCiAgICAgICAgIyB1dWlkCiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgW1VVSUQoJzEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OCcpXQogICAg2gdpbnRlZ2VyegtoZXggaW50ZWdlcnLYAwAAeghbKy1dP1xkK3oOc2lnbmVkIGludGVnZXJy8gMAANoIZnJhY3Rpb25jAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcxAAAAB8AGQBGQB8AGQCGQAbAFMAKQNOcgEAAABydAAAAHJ5AAAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAALQVAAByvgMAAHoZcHlwYXJzaW5nX2NvbW1vbi48bGFtYmRhPnIvAwAAeiJmcmFjdGlvbiBvciBtaXhlZCBpbnRlZ2VyLWZyYWN0aW9ueg1bKy1dP1xkK1wuXGQqegtyZWFsIG51bWJlcnorWystXT9cZCsoW2VFXVsrLV0/XGQrfFwuXGQqKFtlRV1bKy1dP1xkKyk/KXokcmVhbCBudW1i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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 3
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
ordered_set.cpython-310.pyc
15.99 KB
lrw-r--r--
2026-01-09 14:27:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-310.pyc
194.14 KB
lrw-r--r--
2026-01-09 14:27:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-310.pyc
241 B
lrw-r--r--
2026-01-09 14:27:36
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).