bw0NCgAAAACiNI1jd4oDAOMAAAAAAAAAAAAAAAAAAAAACwAAAEAAAABz1AoAAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAHoIZARkCGwSbRNaEwEAVwBuDwQAZRR5UwEAAQABAGQEZAhsFW0TWhMBAFkAbgF3AHoOZARkCWwWbRdaFwEAZARkCmwWbRhaGAEAVwBuFQQAZRR5dwEAAQABAGQEZAlsDW0XWhcBAGQEZApsDW0YWhgBAFkAbgF3AHoIZARkC2wNbRlaGgEAVwBuHQQAZRR5nQEAAQABAHoIZARkC2wbbRlaGgEAVwBuCwQAZRR5mgEAAQABAGQFWhpZAG4BdwBZAG4BdwBnAGQMogFaHGUdZQlqHoMBZAVkDYUCGQBaH2UfZAQZAGQNawJaIGUgcsplCWohWiJlI1okZSVaJmUjWidlKGUpZSplK2UsZR1lLWUuZS9lMGUxZwtaMm4pZQlqM1oiZTRaNWQOZA+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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BGQCZAJkA2QDZQVmBWQGZAeEAVoGZAhkCYQAWgdlBWYBZApkC4QBWghkDGQNhABaCWQOZA+EAFoKZBBkEYQAWgtkEmQThABaDGUMWg1kFGQVhABaDmQWZBeEAFoPZBhkGYQAWhBkGmQbhABaEWQcZB2EAFoSZRNyUGUQWhQJAGURWhUJAGUSWhZuFWUQWhcJAGURWhgJAGUSWhkJAGQeZB+EAFoUZCBkIYQAWhVkImQjhABaFmQkZCWEAFoaZCZkJ4QAWhtkXGQoZCmEAVocZCpkK4QAWh1kLGQthABaHmQuZC+EAFofZDBkMYQAWiBkMmQzhABaIWQ0ZDWEAFoiZDZkN4QAWiNkOGQ5hABaJGQ6ZDuEAFolZDxkPYQAWiZkXWQ/ZECEAVonZEFkQoQAWihkQ2REhABaKWRFZEaEAFoqZF5kSGRJhAFaK2RKZEuEAFosZExkTYQAWi1kX2RPZFCEAVouZFFkUoQAWi9kU2RUhABaMGRVZFaEAFoxZFdkWIQAWjJkWWRahABaM2QCUwApYHIkAAAAYUkFAAAKICAgIFN0cnVjdHVyZWQgcGFyc2UgcmVzdWx0cywgdG8gcHJvdmlkZSBtdWx0aXBsZSBtZWFucyBvZiBhY2Nlc3MgdG8gdGhlIHBhcnNlZCBkYXRhOgogICAgICAgLSBhcyBhIGxpc3QgKEN7bGVuKHJlc3VsdHMpfSkKICAgICAgIC0gYnkgbGlzdCBpbmRleCAoQ3tyZXN1bHRzWzBdLCByZXN1bHRzWzFdfSwgZXRjLikKICAgICAgIC0gYnkgYXR0cmlidXRlIChDe3Jlc3VsdHMuPHJlc3VsdHNOYW1lPn0gLSBzZWUgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfSkKCiAgICBFeGFtcGxlOjoKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQogICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICMgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgIyBwYXJzZVN0cmluZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQogICAgcHJpbnRzOjoKICAgICAgICBsaXN0KHJlc3VsdCkgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCiAgICAgICAgcmVzdWx0WzBdIC0+ICcxOTk5JwogICAgICAgIHJlc3VsdFsnbW9udGgnXSAtPiAnMTInCiAgICAgICAgcmVzdWx0LmRheSAtPiAnMzEnCiAgICAgICAgJ21vbnRoJyBpbiByZXN1bHQgLT4gVHJ1ZQogICAgICAgICdtaW51dGVzJyBpbiByZXN1bHQgLT4gRmFsc2UKICAgICAgICByZXN1bHQuZHVtcCgpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIC0gZGF5OiAzMQogICAgICAgIC0gbW9udGg6IDEyCiAgICAgICAgLSB5ZWFyOiAxOTk5CiAgICBOVGMFAAAAAAAAAAAAAAAGAAAAAwAAAEMAAABzIgAAAHQA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AQoBGAEKAQQBGAEQAhACAvYSCwQBEAEKATQBLAIKAnoRUGFyc2VSZXN1bHRzLmR1bXBjAQAAAAAAAAAAAAAAAwAAAAQAAABPAAAAcyAAAAB0AGoAfACgAaEAZwF8AaIBUgBpAHwCpAGOAQEAZAFTACkCYfUCAAAKICAgICAgICBQcmV0dHktcHJpbnRlciBmb3IgcGFyc2VkIHJlc3VsdHMgYXMgYSBsaXN0LCB1c2luZyB0aGUgQ3twcHJpbnR9IG1vZHVsZS4KICAgICAgICBBY2NlcHRzIGFkZGl0aW9uYWwgcG9zaXRpb25hbCBvciBrZXl3b3JkIGFyZ3MgYXMgZGVmaW5lZCBmb3IgdGhlIAogICAgICAgIEN7cHByaW50LnBwcmludH0gbWV0aG9kLiAoVXtodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQucHByaW50fSkKCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICAgICAgbnVtID0gV29yZChudW1zKQogICAgICAgICAgICBmdW5jID0gRm9yd2FyZCgpCiAgICAgICAgICAgIHRlcm0gPSBpZGVudCB8IG51bSB8IEdyb3VwKCcoJyArIGZ1bmMgKyAnKScpCiAgICAgICAgICAgIGZ1bmMgPDw9IGlkZW50ICsgR3JvdXAoT3B0aW9uYWwoZGVsaW1pdGVkTGlzdCh0ZXJtKSkpCiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMucGFyc2VTdHJpbmcoImZuYSBhLGIsKGZuYiBjLGQsMjAwKSwxMDAiKQogICAgICAgICAgICByZXN1bHQucHByaW50KHdpZHRoPTQwKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIFsnZm5hJywKICAgICAgICAgICAgIFsnYScsCiAgICAgICAgICAgICAgJ2InLAogICAgICAgICAgICAgIFsnKCcsICdmbmInLCBbJ2MnLCAnZCcsICcyMDAnXSwgJyknXSwKICAgICAgICAgICAgICAnMTAwJ11dCiAgICAgICAgTikC2gZwcHJpbnRy5wAAAKkDcq8AAABy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ZCCEAVoUZCFkIoQAWhVkiGQjZCSEAVoWZCVkJoQAWhdkJ2QohABaGEcAZClkKoQAZCplGYMDWhplG2QrdQFycEcAZCxkLYQAZC1lGYMDWhxuCEcAZC5kLYQAZC1lGYMDWhxpAFodZR6DAFofZC9kL2cCWiBkiGQwZDGEAVohZRZaImUGZDJkM4QAgwFaI2QDWiRlBmSJZDVkNoQBgwFaJWSGZDdkOIQBWiZlJ2QDZgJkOWQ6hAFaKGQ7ZDyEAFopZSdmAWQ9ZD6EAVoqZSdkA2YCZD9kQIQBWitkQWRChABaLGRDZESEAFotZEVkRoQAWi5kR2RIhABaL2RJZEqEAFowZEtkTIQAWjFkTWROhABaMmRPZFCEAFozZFFkUoQAWjRkU2RUhABaNWRVZFaEAFo2ZFdkWIQAWjdkWWRahABaOGSKZFtkXIQBWjlkXWRehABaOmRfZGCEAFo7ZGFkYoQAWjxkY2RkhABaPWRlZGaEAFo+ZGdkaIQAWj9kh2RpZGqEAVpAZGtkbIQAWkFkbWRuhABaQmRvZHCEAFpDZHFkcoQAWkRnAGYBZHNkdIQBWkVkhmR1ZHaEAVpGhwBmAWR3ZHiECFpHZHlkeoQAWkhke2R8hABaSWR9ZH6EAFpKZH9kgIQAWktkh2SBZIKEAVpMZItkhGSFhAFaTYcABABaTlMAKYxyJgAAAHopQWJzdHJhY3QgYmFzZSBsZXZlbCBwYXJzZXIgZWxlbWVudCBjbGFzcy56BCAKCQ1GYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAPMKAAAAfAB0AF8BZAFTACkCYdEBAAAKICAgICAgICBPdmVycmlkZXMgdGhlIGRlZmF1bHQgd2hpdGVzcGFjZSBjaGFycwoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgIyBkZWZhdWx0IHdoaXRlc3BhY2UgY2hhcnMgYXJlIHNwYWNlLCA8VEFCPiBhbmQgbmV3bGluZQogICAgICAgICAgICBPbmVPck1vcmUoV29yZChhbHBoYXMpKS5wYXJzZVN0cmluZygiYWJjIGRlZlxuZ2hpIGprbCIpICAjIC0+IFsnYWJjJywgJ2RlZicsICdnaGknLCAnamtsJ10KICAgICAgICAgICAgCiAgICAgICAgICAgICMgY2hhbmdlIHRvIGp1c3QgdHJlYXQgbmV3bGluZSBhcyBzaWduaWZpY2FudAogICAgICAgICAgICBQYXJzZXJFbGVtZW50LnNldERlZmF1bHRXaGl0ZXNwYWNlQ2hhcnMoIiBcdCIpCiAgICAgICAgICAgIE9uZU9yTW9yZShXb3JkKGFscGhhcykpLnBhcnNlU3RyaW5nKCJhYmMgZGVmXG5naGkgamtsIikgICMgLT4gWydhYmMnLCAnZGVmJ10KICAgICAgICBOKQJyJgAAANoTREVGQVVMVF9XSElURV9DSEFSU6kB2gVjaGFyc3J5AAAAcnkAAAByegAAANoZc2V0RGVmYXVsdFdoaXRlc3BhY2VDaGFyc1QEAABzAgAAAAoNeidQYXJzZXJFbGVtZW50LnNldERlZmF1bHRXaGl0ZXNwYWNlQ2hhcnNjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcrgBAAApAmGFAgAACiAgICAgICAgU2V0IGNsYXNzIHRvIGJlIHVzZWQgZm9yIGluY2x1c2lvbiBvZiBzdHJpbmcgbGl0ZXJhbHMgaW50byBhIHBhcnNlci4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgIyBkZWZhdWx0IGxpdGVyYWwgY2xhc3MgdXNlZCBpcyBMaXRlcmFsCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpICAgICAgICAgICAKCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCgoKICAgICAgICAgICAgIyBjaGFuZ2UgdG8gU3VwcHJlc3MKICAgICAgICAgICAgUGFyc2VyRWxlbWVudC5pbmxpbmVMaXRlcmFsc1VzaW5nKFN1cHByZXNzKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJk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IG1hdGNoaW5nIHN1YnN0cmluZwogICAgICAgICAtIHRva3MgPSBhIGxpc3Qgb2YgdGhlIG1hdGNoZWQgdG9rZW5zLCBwYWNrYWdlZCBhcyBhIEN7THtQYXJzZVJlc3VsdHN9fSBvYmplY3QKICAgICAgICBJZiB0aGUgZnVuY3Rpb25zIGluIGZucyBtb2RpZnkgdGhlIHRva2VucywgdGhleSBjYW4gcmV0dXJuIHRoZW0gYXMgdGhlIHJldHVybgogICAgICAgIHZhbHVlIGZyb20gZm4sIGFuZCB0aGUgbW9kaWZpZWQgbGlzdCBvZiB0b2tlbnMgd2lsbCByZXBsYWNlIHRoZSBvcmlnaW5hbC4KICAgICAgICBPdGhlcndpc2UsIGZuIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueSB2YWx1ZS4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgIC0gY2FsbER1cmluZ1RyeSA9IChkZWZhdWx0PUN7RmFsc2V9KSBpbmRpY2F0ZSBpZiBwYXJzZSBhY3Rpb24gc2hvdWxkIGJlIHJ1biBkdXJpbmcgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcKCiAgICAgICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICAgICAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywgdGhlIHBhcnNlIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uCiAgICAgICAgcG9zaXRpb25zIHdpdGhpbiB0aGUgcGFyc2VkIHN0cmluZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCgogICAgICAgICAgICAjIHVzZSBwYXJzZSBhY3Rpb24gdG8gY29udmVydCB0byBpbnRzIGF0IHBhcnNlIHRpbWUKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgICMgbm90ZSB0aGF0IGludGVnZXIgZmllbGRzIGFyZSBub3cgaW50cywgbm90IHN0cmluZ3MKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbMTk5OSwgJy8nLCAxMiwgJy8nLCAzMV0KICAgICAgICBy0gEAAEYpBnLvAAAA2gNtYXBytwEAAHK/AQAAcv8AAABy0gEAAKkDcq8AAADaA2Zuc3IwAQAAcnkAAAByeQAAAHJ6AAAAcoQAAADiBAAAcwYAAAAUIg4BBAF6HFBhcnNlckVsZW1lbnQuc2V0UGFyc2VBY3Rpb25jAQAAAAAAAAAAAAAAAwAAAAcAAABPAAAAczQAAAB8AAQAagB0AXQCdAN0AXwBgwGDAoMBNwACAF8AfABqBHAWfAKgBWQBZAKhAnwAXwR8AFMAKQN6swogICAgICAgIEFkZCBvbmUgb3IgbW9yZSBwYXJzZSBhY3Rpb25zIHRvIGV4cHJlc3Npb24ncyBsaXN0IG9mIHBhcnNlIGFjdGlvbnMuIFNlZSBMe0l7c2V0UGFyc2VBY3Rpb259PHNldFBhcnNlQWN0aW9uPn0uCiAgICAgICAgCiAgICAgICAgU2VlIGV4YW1wbGVzIGluIEx7SXtjb3B5fTxjb3B5Pn0uCiAgICAgICAgctIBAABGKQZyvwEAAHLvAAAAcukBAABytwEAAHLSAQAAcv8AAABy6gEAAHJ5AAAAcnkAAAByegAAANoOYWRkUGFyc2VBY3Rpb24IBQAAcwYAAAAcBhQBBAF6HFBhcnNlckVsZW1lbnQuYWRkUGFyc2VBY3Rpb25jAQAAAAAAAAAAAAAABAAAAAQAAAAPAAAAc14AAAB8AqAAZAFkAqECiQJ8AqAAZANkBKECcg50AW4BdAKJAHwBRABdEIkBhwCHAYcCZgNkBWQGhAh9A3wAagOgBHwDoQEBAHESfABqBXArfAKgAGQHZAShAnwAXwV8AFMAKQhh0wMAAEFkZCBhIGJvb2xlYW4gcHJlZGljYXRlIGZ1bmN0aW9uIHRvIGV4cHJlc3Npb24ncyBsaXN0IG9mIHBhcnNlIGFjdGlvbnMuIFNlZSAKICAgICAgICBMe0l7c2V0UGFyc2VBY3Rpb259PHNldFBhcnNlQWN0aW9uPn0gZm9yIGZ1bmN0aW9uIGNhbGwgc2lnbmF0dXJlcy4gVW5saWtlIEN7c2V0UGFyc2VBY3Rpb259LCAKICAgICAgICBmdW5jdGlvbnMgcGFzc2VkIHRvIEN7YWRkQ29uZGl0aW9ufSBuZWVkIHRvIHJldHVybiBib29sZWFuIHN1Y2Nlc3MvZmFpbCBvZiB0aGUgY29uZGl0aW9uLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50czoKICAgICAgICAgLSBtZXNzYWdlID0gZGVmaW5lIGEgY3VzdG9tIG1lc3NhZ2UgdG8gYmUgdXNlZCBpbiB0aGUgcmFpc2VkIGV4Y2VwdGlvbgogICAgICAgICAtIGZhdGFsICAgPSBpZiBUcnVlLCB3aWxsIHJhaXNlIFBhcnNlRmF0YWxFeGNlcHRpb24gdG8gc3RvcCBwYXJzaW5nIGltbWVkaWF0ZWx5OyBvdGhlcndpc2Ugd2lsbCByYWlzZSBQYXJzZUV4Y2VwdGlvbgogICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6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IGxpbWl0IHRoZSBzaXplIG9mIHRoZSBwYWNrcmF0IGNhY2hlOyBpZiBOb25lIGlzIHBhc3NlZCwgdGhlbgogICAgICAgICAgICAgIHRoZSBjYWNoZSBzaXplIHdpbGwgYmUgdW5ib3VuZGVkOyBpZiAwIGlzIHBhc3NlZCwgdGhlIGNhY2hlIHdpbGwKICAgICAgICAgICAgICBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KICAgICAgICAgICAgCiAgICAgICAgICAgVGhpcyBzcGVlZHVwIG1heSBicmVhayBleGlzdGluZyBwcm9ncmFtcyB0aGF0IHVzZSBwYXJzZSBhY3Rpb25zIHRoYXQKICAgICAgICAgICBoYXZlIHNpZGUtZWZmZWN0cy4gIEZvciB0aGlzIHJlYXNvbiwgcGFja3JhdCBwYXJzaW5nIGlzIGRpc2FibGVkIHdoZW4KICAgICAgICAgICB5b3UgZmlyc3QgaW1wb3J0IHB5cGFyc2luZy4gIFRvIGFjdGl2YXRlIHRoZSBwYWNrcmF0IGZlYXR1cmUsIHlvdXIKICAgICAgICAgICBwcm9ncmFtIG11c3QgY2FsbCB0aGUgY2xhc3MgbWV0aG9kIEN7UGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCl9LiAgSWYKICAgICAgICAgICB5b3VyIHByb2dyYW0gdXNlcyBDe3BzeWNvfSB0byAiY29tcGlsZSBhcyB5b3UgZ28iLCB5b3UgbXVzdCBjYWxsCiAgICAgICAgICAgQ3tlbmFibGVQYWNrcmF0fSBiZWZvcmUgY2FsbGluZyBDe3BzeWNvLmZ1bGwoKX0uICBJZiB5b3UgZG8gbm90IGRvIHRoaXMsCiAgICAgICAgICAgUHl0aG9uIHdpbGwgY3Jhc2guICBGb3IgYmVzdCByZXN1bHRzLCBjYWxsIEN7ZW5hYmxlUGFja3JhdCgpfSBpbW1lZGlhdGVseQogICAgICAgICAgIGFmdGVyIGltcG9ydGluZyBweXBhcnNpbmcuCiAgICAgICAgICAgCiAgICAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgICAgIGltcG9ydCBweXBhcnNpbmcKICAgICAgICAgICAgICAgcHlwYXJzaW5nLlBhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdCgpCiAgICAgICAgVE4pB3ImAAAA2g9fcGFja3JhdEVuYWJsZWRyIQIAAHI0AgAAci4CAAByOQIAAHLmAQAAKQHaEGNhY2hlX3NpemVfbGltaXRyeQAAAHJ5AAAAcnoAAADaDWVuYWJsZVBhY2tyYXQlBgAAcw4AAAAGGwYBCAEMAQwCDAEE+nobUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YwMAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHOiAAAAdACgAaEAAQB8AGoCcwt8AKADoQABAHwAagREAF0GfQN8A6ADoQABAHEOfABqBXMcfAGgBqEAfQF6InwAoAd8AWQBoQJcAn0EfQV8AnI8fACgCHwBfAShAn0EdAmDAHQKgwAXAH0GfAagB3wBfAShAgEAVwB8BVMAVwB8BVMABAB0C3lQAQB9BwEAegZ0AGoMckqCAHwHggFkAn0Hfgd3AXcAKQNhQgUAAAogICAgICAgIEV4ZWN1dGUgdGhlIHBhcnNlIGV4cHJlc3Npb24gd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nLgogICAgICAgIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIHRvIHRoZSBjbGllbnQgY29kZSwgb25jZSB0aGUgY29tcGxldGUKICAgICAgICBleHByZXNzaW9uIGhhcyBiZWVuIGJ1aWx0LgoKICAgICAgICBJZiB5b3Ugd2FudCB0aGUgZ3JhbW1hciB0byByZXF1aXJlIHRoYXQgdGhlIGVudGlyZSBpbnB1dCBzdHJpbmcgYmUKICAgICAgICBzdWNjZXNzZnVsbHkgcGFyc2VkLCB0aGVuIHNldCBDe3BhcnNlQWxsfSB0byBUcnVlIChlcXVpdmFsZW50IHRvIGVuZGluZwogICAgICAgIHRoZSBncmFtbWFyIHdpdGggQ3tMe1N0cmluZ0VuZCgpfX0pLgoKICAgICAgICBOb3RlOiBDe3BhcnNlU3RyaW5nfSBpbXBsaWNpdGx5IGNhbGxzIEN7ZXhwYW5kdGFicygpfSBvbiB0aGUgaW5wdXQgc3RyaW5nLAogICAgICAgIGluIG9yZGVyIHRvIHJlcG9ydCBwcm9wZXIgY29sdW1uIG51bWJlcnMgaW4gcGFyc2UgYWN0aW9ucy4KICAgICAgICBJZiB0aGUgaW5wdXQgc3RyaW5nIGNvbnRhaW5zIHRhYnMgYW5kCiAgICAgICAgdGhlIGdyYW1tYXIgdXNlcyBwYXJzZSBhY3Rpb25zIHRoYXQgdXNlIHRoZSBDe2xvY30gYXJndW1lbnQgdG8gaW5kZXggaW50byB0aGUKICAgICAgICBzdHJpbmcgYmVpbmcgcGFyc2VkLCB5b3UgY2FuIGVuc3VyZSB5b3UgaGF2ZSBhIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgaW5wdXQKICAgICAgICBzdHJpbmcgYnk6CiAgICAgICAgIC0gY2FsbGluZyBDe3BhcnNlV2l0aFRhYnN9IG9uIHlvdXIgZ3JhbW1hciBiZWZvcmUgY2FsbGluZyBDe3BhcnNlU3RyaW5nfQogICAgICAgICAgIChzZWUgTHtJe3BhcnNlV2l0aFRhYnN9PHBhcnNlV2l0aFRhYnM+fSkKICAgICAgICAgLSBkZWZpbmUgeW91ciBwYXJzZSBhY3Rpb24gdXNpbmcgdGhlIGZ1bGwgQ3socyxsb2MsdG9rcyl9IHNpZ25hdHVyZSwgYW5kCiAgICAgICAgICAgcmVmZXJlbmNlIHRoZSBpbnB1dCBzdHJpbmcgdXNpbmcgdGhlIHBhcnNlIGFjdGlvbidzIEN7c30gYXJndW1lbnQKICAgICAgICAgLSBleHBsaWN0bHkgZXhwYW5kIHRoZSB0YWJzIGluIHlvdXIgaW5wdXQgc3RyaW5nIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgICAgQ3twYXJzZVN0cmluZ30KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnKSAgIyAtPiBbJ2FhYWFhJ10KICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnLCBwYXJzZUFsbD1UcnVlKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIGVuZCBvZiB0ZXh0CiAgICAgICAgcgEAAABOKQ1yJgAAAHI6AgAAcssBAADaCnN0cmVhbWxpbmVyyQEAAHLIAQAA2gpleHBhbmR0YWJzcuYBAABy/QEAAHIPAAAAcisAAAByHwAAANoSdmVyYm9zZV9zdGFja3RyYWNlKQhyrwAAAHKPAQAA2ghwYXJzZUFsbHL3AQAAcqoAAAByBwIAANoCc2VylgEAAHJ5AAAAcnkAAAByegAAANoLcGFyc2VTdHJpbmdIBgAAcywAAAAIGwYBCAEKAgoBBgEIAQIBEAEEAQwBDAEOAQQIAvUECw75BgECAQQDCIAC+3oZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAAAAAAAPAAAACgAAAGMAAABzRAEAAIEAfABqAHMIfACgAaEAAQB8AGoCRABdBn0EfASgAaEAAQBxC3wAagNzG3QEfAGDAaAFoQB9AXQGfAGDAX0FZAF9BnwAagd9B3wAagh9CHQJoAqhAAEAZAF9CXpifAZ8BWsBcod8CXwCawByinoQfAd8AXwGgwJ9CnwIfAF8CmQCZAONA1wCfQt9DFcAbg0EAHQLeVMBAAEAAQB8CmQEFwB9BlkAbil3AHwLfAZrBHJ4fAlkBDcAfQl8DHwKfAtmA1YAAQB8A3J1fAd8AXwGgwJ9DXwNfAZrBHJwfAt9Bm4MfAZkBDcAfQZuB3wLfQZuBHwKZAQXAH0GfAZ8BWsBco18CXwCawBzNlcAZAVTAFcAZAVTAFcAZAVTAFcAZAVTAAQAdAx5oQEAfQ4BAHoGdAlqDXKbggB8DoIBZAV9Dn4OdwF3ACkGYYYEAAAKICAgICAgICBTY2FuIHRoZSBpbnB1dCBzdHJpbmcgZm9yIGV4cHJlc3Npb24gbWF0Y2hlcy4gIEVhY2ggbWF0Y2ggd2lsbCByZXR1cm4gdGhlCiAgICAgICAgbWF0Y2hpbmcgdG9rZW5zLCBzdGFydCBsb2NhdGlvbiwgYW5kIGVuZCBsb2NhdGlvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIEN7bWF4TWF0Y2hlc30gYXJndW1lbnQsIHRvIGNsaXAgc2Nhbm5pbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLiAgSWYKICAgICAgICBDe292ZXJsYXB9IGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcKICAgICAgICBzdHJpbmdzIHdpdGggZW1iZWRkZWQgdGFicy4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIHNvdXJjZSA9ICJzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODciCiAgICAgICAgICAgIHByaW50KHNvdXJjZSkKICAgICAgICAgICAgZm9yIHRva2VucyxzdGFydCxlbmQgaW4gV29yZChhbHBoYXMpLnNjYW5TdHJpbmcoc291cmNlKToKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArICdeJyooZW5kLXN0YXJ0KSkKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArIHRva2Vuc1swXSkKICAgICAgICAKICAgICAgICBwcmludHM6OgogICAgICAgIAogICAgICAgICAgICBzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODcKICAgICAgICAgICAgXl5eXl4KICAgICAgICAgICAgc2xkamYKICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgbHNkamprZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xka2pmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsa2pzZmQKICAgICAgICByAQAAAEapAXLgAQAAco4AAABOKQ5yywEAAHI/AgAAcskBAAByyAEAAHKJAAAAckACAAByBQEAAHL9AQAAcuYBAAByJgAAAHI6AgAAciEAAAByHwAAAHJBAgAAKQ9yrwAAAHKP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UwAEAHQCeSABAH0DAQB6BnQDagRyGoIAfAOCAWQDfQN+A3cBdwApBGGtAwAACiAgICAgICAgQW5vdGhlciBleHRlbnNpb24gdG8gQ3tMe3NjYW5TdHJpbmd9fSwgc2ltcGxpZnlpbmcgdGhlIGFjY2VzcyB0byB0aGUgdG9rZW5zIGZvdW5kCiAgICAgICAgdG8gbWF0Y2ggdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBDe21heE1hdGNoZXN9IGFyZ3VtZW50LCB0byBjbGlwIHNlYXJjaGluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgICMgYSBjYXBpdGFsaXplZCB3b3JkIHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsb3dlcmNhc2UgbGV0dGVycwogICAgICAgICAgICBjYXBfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQogICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQoY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKQoKICAgICAgICAgICAgIyB0aGUgc3VtKCkgYnVpbHRpbiBjYW4gYmUgdXNlZCB0byBtZXJnZSByZXN1bHRzIGludG8gYSBzaW5nbGUgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgICAgICBwcmludChzdW0oY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbWydNb3JlJ10sIFsnSXJvbiddLCBbJ0xlYWQnXSwgWydHb2xkJ10sIFsnSSddLCBbJ0VsZWN0cmljaXR5J11dCiAgICAgICAgICAgIFsnTW9yZScsICdJcm9uJywgJ0xlYWQnLCAnR29sZCcsICdJJywgJ0VsZWN0cmljaXR5J10KICAgICAgICBjAQAAAAAAAAAAAAAABAAAAAUAAABTAAAAcxYAAABnAHwAXQdcA30BfQJ9A3wBkQJxAlMAcnkAAAByeQAAACkEcosAAAByeAAAAHKRAAAAcvcBAAByeQAAAHJ5AAAAcnoAAABy/AAAAP8GAADzAgAAABYAei5QYXJzZXJFbGVtZW50LnNlYXJjaFN0cmluZy48bG9jYWxzPi48bGlzdGNvbXA+TikFciQAAAByTQIAAHIfAAAAciYAAAByQQIAACkEcq8AAAByjwEAAHJGAgAAcpYBAAByeQAAAHJ5AAAAcnoAAADaDHNlYXJjaFN0cmluZ+wGAABzEAAAAAISHAEOAQYBAgEEAwiAAvt6GlBhcnNlckVsZW1lbnQuc2VhcmNoU3RyaW5nYwQAAAAAAAAAAAAAAAkAAAAEAAAAYwAAAHNWAAAAgQBkAX0EZAF9BXwAagB8AXwCZAKNAkQAXRVcA30GfQd9CHwBfAV8B4UCGQBWAAEAfANyH3wGZAEZAFYAAQB8CH0FcQx8AXwFZAOFAhkAVgABAGQDUwApBGFbAgAACiAgICAgICAgR2VuZXJhdG9yIG1ldGhvZCB0byBzcGxpdCBhIHN0cmluZyB1c2luZyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhcyBhIHNlcGFyYXRvci4KICAgICAgICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwgQ3ttYXhzcGxpdH0gYXJndW1lbnQsIHRvIGxpbWl0IHRoZSBudW1iZXIgb2Ygc3BsaXRzOwogICAgICAgIGFuZCB0aGUgb3B0aW9uYWwgQ3tpbmNsdWRlU2VwYXJhdG9yc30gYXJndW1lbnQgKGRlZmF1bHQ9Q3tGYWxzZX0pLCBpZiB0aGUgc2VwYXJhdGluZwogICAgICAgIG1hdGNoaW5nIHRleHQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzcGxpdCByZXN1bHRzLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OiAgICAgICAgCiAgICAgICAgICAgIHB1bmMgPSBvbmVPZihsaXN0KCIuLDs6Ly0hPyIpKQogICAgICAgICAgICBwcmludChsaXN0KHB1bmMuc3BsaXQoIlRoaXMsIHRoaXM/LCB0aGlzIHNlbnRlbmNlLCBpcyBiYWRseSBwdW5jdHVhdGVkISIpKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbJ1RoaXMnLCAnIHRoaXMnLCAnJywgJyB0aGlzIHNlbnRlbmNlJywgJyBpcyBiYWRseSBwdW5jdHVhdGVkJywgJyddCiAgICAgICAgcgEAAAApAXJGAgAATikBck0CAAApCXKvAAAAco8BAADaCG1heHNwbGl02hFpbmNsdWRlU2VwYXJhdG9yc9oGc3BsaXRz2gRsYXN0cngAAABykQAAAHL3AQAAcnkAAAByeQAAAHJ6AAAAcpMAAAAHBwAAcxIAAAACgAQNBAEYAQ4BBAEKAQYBEgF6E1BhcnNlckVsZW1lbnQuc3BsaXRjAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAA80YAAAB0AHwBdAGDAnIKdAKgA3wBoQF9AXQAfAF0AoMCcx10BGoFZAF0BnwBgwEWAHQHZAJkA40DAQBkBFMAdAh8AHwBZwKDAVMAKQVhlgEAAAogICAgICAgIEltcGxlbWVudGF0aW9uIG9mICsgb3BlcmF0b3IgLSByZXR1cm5zIEN7THtBbmR9fS4gQWRkaW5nIHN0cmluZ3MgdG8gYSBQYXJzZXJFbGVtZW50CiAgICAgICAgY29udmVydHMgdGhlbSB0byBMe0xpdGVyYWx9cyBieSBkZWZhdWx0LgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgogICAgICAgICAgICBoZWxsbyA9ICJIZWxsbywgV29ybGQhIgogICAgICAgICAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKICAgICAgICBQcmludHM6OgogICAgICAgICAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KICAgICAgICD6NENhbm5vdCBjb21iaW5lIGVsZW1lbnQgb2YgdHlwZSAlcyB3aXRoIFBhcnNlckVsZW1lbnRycwAAAKkB2gpzdGFja2xldmVsTikJcn0AAABy9AAAAHImAAAAcr0BAADaCHdhcm5pbmdz2gR3YXJucscAAADaDVN5bnRheFdhcm5pbmdyCAAAAHJMAQAAcnkAAAByeQAAAHJ6AAAAckEBAAAdBwAAcxAAAAAKDAoBCgEOAQQBBv8EAgwBehVQYXJzZXJFbGVtZW50Ll9fYWRkX19jAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAc0IAAAB0AHwBdAGDAnIKdAKgA3wBoQF9AXQAfAF0AoMCcx10BGoFZAF0BnwBgwEWAHQHZAJkA40DAQBkBFMAfAF8ABcAUwApBXpdCiAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgKyBvcGVyYXRvciB3aGVuIGxlZnQgb3BlcmFuZCBpcyBub3QgYSBDe0x7UGFyc2VyRWxlbWVudH19CiAgICAgICAgclgCAABycwAAAHJZAgAATqkIcn0AAABy9AAAAHImAAAAcr0BAAByWwIAAHJcAgAAcscAAAByXQIAAHJMAQAAcnkAAAByeQAAAHJ6AAAAck0BAAAxBwAA8xAAAAAKBAoBCgEOAQQBBv8EAggBehZQYXJzZXJFbGVtZW50Ll9fcmFkZF9fYwIAAAAAAAAAAAAAAAIAAAAFAAAAQwAAAHNKAAAAdAB8AXQBgwJyCnQCoAN8AaEBfQF0AHwBdAKDAnMddARqBWQBdAZ8AYMBFgB0B2QCZAONAwEAZARTAHwAdAigCaEAFwB8ARcAUwApBXpRCiAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgLSBvcGVyYXRvciwgcmV0dXJucyBDe0x7QW5kfX0gd2l0aCBlcnJvciBzdG9wCiAgICAgICAgclgCAABycwAAAHJZAgAATikKcn0AAABy9AAAAHImAAAAcr0BAAByWwIAAHJcAgAAcscAAAByXQIAAHIIAAAA2gpfRXJyb3JTdG9wckwBAAByeQAAAHJ5AAAAcnoAAADaB19fc3ViX189BwAAcxAAAAAKBAoBCgEOAQQBBv8EAhABehVQYXJzZXJFbGVtZW50Ll9fc3ViX19jAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAc0IAAAB0AHwBdAGDAnIKdAKgA3wBoQF9AXQAfAF0AoMCcx10BGoFZAF0BnwBgwEWAHQHZAJkA40DAQBkBFMAfAF8ABgAUwApBXpdCiAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgLSBvcGVyYXRvciB3aGVuIGxlZnQgb3BlcmFuZCBpcyBub3QgYSBDe0x7UGFyc2VyRWxlbWVudH19CiAgICAgICAgclgCAABycwAAAHJZAgAATnJeAgAAckwBAAByeQAAAHJ5AAAAcnoAAADaCF9fcnN1Yl9fSQcAAHJfAgAAehZQYXJzZXJFbGVtZW50Ll9fcnN1Yl9fYwIAAAAAAAAAAAAAAAUAAAAGAAAAAwAAAHOoAQAAdAB8AXQBgwJyC3wBZAECAn0CfQNucHQAfAF0AoMCcnR8AWQCFwBkA2QEhQIZAH0BfAFkARkAZAN1AHIkZAF8AWQFGQBmAn0BdAB8AWQBGQB0AYMCck98AWQFGQBkA3UAck98AWQBGQBkAWsCcjt0A4gBgwFTAHwBZAEZAGQFawJyRXQEiAGDAVMAiAF8AWQBGQAUAHQDiAGDARcAUwB0AHwBZAEZAHQBgwJyZnQAfAFkBRkAdAGDAnJmfAFcAn0CfQN8A3wCOAB9A24VdAVkBnQGfAFkARkAgwF0BnwBZAUZAIMBgwOCAXQFZAd0BnwBgwGDAoIBfAJkAWsAcoN0B2QIgwGCAXwDZAFrAHKLdAdkCYMBggF8AnwDBAADAGsCcphkAWsCcpl0B2QKgwGCAQEAfANyw4cAhwFmAmQLZAyECIkAfAJyvXwCZAVrAnKwiAGIAHwDgwEXAH0EfARTAHQIiAFnAXwCFACDAYgAfAODARcAfQR8BFMAiAB8A4MBfQR8BFMAfAJkBWsCcsuIAX0EfARTAHQIiAFnAXwCFACDAX0EfARTACkNYeUDAAAKICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiAqIG9wZXJhdG9yLCBhbGxvd3MgdXNlIG9mIEN7ZXhwciAqIDN9IGluIHBsYWNlIG9mCiAgICAgICAgQ3tleHByICsgZXhwciArIGV4cHJ9LiAgRXhwcmVzc2lvbnMgbWF5IGFsc28gbWUgbXVsdGlwbGllZCBieSBhIDItaW50ZWdlcgogICAgICAgIHR1cGxlLCBzaW1pbGFyIHRvIEN7e21pbixtYXh9fSBtdWx0aXBsaWVycyBpbiByZWd1bGFyIGV4cHJlc3Npb25zLiAgVHVwbGVzCiAgICAgICAgbWF5IGFsc28gaW5jbHVkZSBDe05vbmV9IGFzIGluOgogICAgICAgICAtIEN7ZXhwcioobixOb25lKX0gb3IgQ3tleHByKihuLCl9IGlzIGVxdWl2YWxlbnQKICAgICAgICAgICAgICB0byBDe2V4cHIqbiArIEx7WmVyb09yTW9yZX0oZXhwcil9CiAgICAgICAgICAgICAgKHJlYWQgYXMgImF0IGxlYXN0IG4gaW5zdGFuY2VzIG9mIEN7ZXhwcn0iKQogICAgICAgICAtIEN7ZXhwciooTm9uZSxuKX0gaXMgZXF1aXZhbGVudCB0byBDe2V4cHIqKDAsbil9CiAgICAgICAgICAgICAgKHJlYWQgYXMgIjAgdG8gbiBpbnN0YW5jZXMgb2YgQ3tleHByfSIpCiAgICAgICAgIC0gQ3tleHByKihOb25lLE5vbmUpfSBpcyBlcXVpdmFsZW50IHRvIEN7THtaZXJvT3JNb3JlfShleHByKX0KICAgICAgICAgLSBDe2V4cHIqKDEsTm9uZSl9IGlzIGVxdWl2YWxlbnQgdG8gQ3tMe09uZU9yTW9yZX0oZXhwcil9CgogICAgICAgIE5vdGUgdGhhdCBDe2V4cHIqKE5vbmUsbil9IGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgIG1vcmUgdGhhbiBuIGV4cHJzIGV4aXN0IGluIHRoZSBpbnB1dCBzdHJlYW07IHRoYXQgaXMsCiAgICAgICAgQ3tleHByKihOb25lLG4pfSBkb2VzIG5vdCBlbmZvcmNlIGEgbWF4aW11bSBudW1iZXIgb2YgZXhwcgogICAgICAgIG9jY3VycmVuY2VzLiAgSWYgdGhpcyBiZWhhdmlvciBpcyBkZXNpcmVkLCB0aGVuIHdyaXRlCiAgICAgICAgQ3tleHByKihOb25lLG4pICsgfmV4cHJ9CiAgICAgICAgcgEAAAApAk5OTnJzAAAAco4AAAB6N2Nhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcgYW5kICgnJXMnLCclcycpIG9iamVjdHN6MGNhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcg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YXkgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIGRvaW5nIHBhdHRlcm4gbWF0Y2hpbmcuCiAgICAgICAgU2V0IEN7ZmxhZ30gdG8gVHJ1ZSB0byBlbmFibGUsIEZhbHNlIHRvIGRpc2FibGUuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKS5zZXROYW1lKCJhbHBoYXdvcmQiKQogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXROYW1lKCJudW13b3JkIikKICAgICAgICAgICAgdGVybSA9IHdkIHwgaW50ZWdlcgogICAgICAgICAgICAKICAgICAgICAgICAgIyB0dXJuIG9uIGRlYnVnZ2luZyBmb3Igd2QKICAgICAgICAgICAgd2Quc2V0RGVidWcoKQoKICAgICAgICAgICAgT25lT3JNb3JlKHRlcm0pLnBhcnNlU3RyaW5nKCJhYmMgMTIzIHh5eiA4OTAiKQogICAgICAgIAogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMCgxLDEpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsnYWJjJ10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAzKDEsNCkKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDcoMSw4KQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ3h5eiddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTEoMSwxMikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTIpLCAobGluZToxLCBjb2w6MTMpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTUoMSwxNikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTUpLCAobGluZToxLCBjb2w6MTYpCgogICAgICAgIFRoZSBvdXRwdXQgc2hvd24gaXMgdGhhdCBwcm9kdWNlZCBieSB0aGUgZGVmYXVsdCBkZWJ1ZyBhY3Rpb25zIC0gY3VzdG9tIGRlYnVnIGFjdGlvbnMgY2FuIGJlCiAgICAgICAgc3BlY2lmaWVkIHVzaW5nIEx7c2V0RGVidWdBY3Rpb25zfS4gUHJpb3IgdG8gYXR0ZW1wdGluZwogICAgICAgIHRvIG1hdGNoIHRoZSBDe3dkfSBleHByZXNzaW9uLCB0aGUgZGVidWdnaW5nIG1lc3NhZ2UgQ3siTWF0Y2ggPGV4cHJuYW1lPiBhdCBsb2MgPG4+KDxsaW5lPiw8Y29sPikifQogICAgICAgIGlzIHNob3duLiBUaGVuIGlmIHRoZSBwYXJzZSBzdWNjZWVkcywgYSBDeyJNYXRjaGVkIn0gbWVzc2FnZSBpcyBzaG93biwgb3IgYW4gQ3siRXhjZXB0aW9uIHJhaXNlZCJ9CiAgICAgICAgbWVzc2FnZSBpcyBzaG93bi4gQWxzbyBub3RlIHRoZSB1c2Ugb2YgTHtzZXROYW1lfSB0byBhc3NpZ24gYSBodW1hbi1yZWFkYWJsZSBuYW1lIHRvIHRoZSBleHByZXNzaW9uLAogICAgICAgIHdoaWNoIG1ha2VzIGRlYnVnZ2luZyBhbmQgZXhjZXB0aW9uIG1lc3NhZ2VzIGVhc2llciB0byB1bmRlcnN0YW5kIC0gZm9yIGluc3RhbmNlLCB0aGUgZGVmYXVsdAogICAgICAgIG5hbWUgY3JlYXRlZCBmb3IgdGhlIEN7V29yZH0gZXhwcmVzc2lvbiB3aXRob3V0IGNhbGxpbmcgQ3tzZXROYW1lfSBpcyBDeyJXOihBQkNELi4uKSJ9LgogICAgICAgIEYpBXKBAgAAcpEBAABylQEAAHKXAQAAcsoBAAApAnKvAAAA2gRmbGFncnkAAAByeQAAAHJ6AAAA2ghzZXREZWJ1Z0AIAABzCgAAAAQjDgEEAwb/BAF6FlBhcnNlckVsZW1lbnQuc2V0RGVidWdjAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcwYAAAB8AGoA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bWVudHMgaW4gdGhlIHRlc3QgCiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBkdW1wIHJlc3VsdHMgYXMgbGlzdCBmb2xsb3dlZCBieSByZXN1bHRzIG5hbWVzIGluIG5lc3RlZCBvdXRsaW5lOwogICAgICAgICAgICAgIGlmIEZhbHNlLCBvbmx5IGR1bXAgbmVzdGVkIGxpc3QKICAgICAgICAgLSBwcmludFJlc3VsdHMgLSAoZGVmYXVsdD1De1RydWV9KSBwcmludHMgdGVzdCBvdXRwdXQgdG8gc3Rkb3V0CiAgICAgICAgIC0gZmFpbHVyZVRlc3RzIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCgogICAgICAgIFJldHVybnM6IGEgKHN1Y2Nlc3MsIHJlc3VsdHMpIHR1cGxlLCB3aGVyZSBzdWNjZXNzIGluZGljYXRlcyB0aGF0IGFsbCB0ZXN0cyBzdWNjZWVkZWQKICAgICAgICAob3IgZmFpbGVkIGlmIEN7ZmFpbHVyZVRlc3RzfSBpcyBUcnVlKSwgYW5kIHRoZSByZXN1bHRzIGNvbnRhaW4gYSBsaXN0IG9mIGxpbmVzIG9mIGVhY2ggCiAgICAgICAgdGVzdCdzIG91dHB1dAogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBbMTAwXQoKICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgWy0xMDBdCgogICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgWzFlLTEyXQoKICAgICAgICAgICAgU3VjY2VzcwogICAgICAgICAgICAKICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDMpLCAobGluZToxLCBjb2w6NCkKCiAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCB7cmVhbCBudW1iZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uIHwgcmVhbCBudW1iZXIgfCBzaWduZWQgaW50ZWdlcn0gKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQoKICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQoKICAgICAgICAgICAgU3VjY2VzcwoKICAgICAgICBFYWNoIHRlc3Qgc3RyaW5nIG11c3QgYmUgb24gYSBzaW5nbGUgbGluZS4gSWYgeW91IHdhbnQgdG8gdGVzdCBhIHN0cmluZyB0aGF0IHNwYW5zIG11bHRpcGxlCiAgICAgICAgbGluZXMsIGNyZWF0ZSBhIHRlc3QgbGlrZSB0aGlzOjoKCiAgICAgICAgICAgIGV4cHIucnVuVGVzdChyInRoaXMgaXMgYSB0ZXN0XG4gb2Ygc3RyaW5ncyB0aGF0IHNwYW5zIFxuIDMgbGluZXMiKQogICAgICAgIAogICAgICAgIChOb3RlIHRoYXQgdGhpcyBpcyBhIHJhdyBzdHJpbmcgbGl0ZXJhbCwgeW91IG11c3QgaW5jbHVkZSB0aGUgbGVhZGluZyAncicuKQogICAgICAgIFRORnJfAQAA+gJcbnKbAgAAKQFyfQEAAHoHKEZBVEFMKXKjAAAA+gEgco4AAAD6AV56BkZBSUw6IHoQRkFJTC1FWENFUFRJT046ICkWcn0AAABy9AAAAHLvAAAAcukBAAByfwAAAHLBAAAA2gZyc3RyaXDaCnNwbGl0bGluZXNyFwAAAHJKAgAAcjgBAABywAAAAHKVAAAAckQCAAByegEAAHIfAAAAciMAAABySQAAAHKqAAAAcjsAAAByswEAAHKOAQAAKRByrwAAANoFdGVzdHNyQgIAANoHY29tbWVudNoIZnVsbER1bXDaDHByaW50UmVzdWx0c9oMZmFpbHVyZVRlc3Rz2gphbGxSZXN1bHRz2ghjb21tZW50c9oHc3VjY2Vzc3J4AAAAclUBAADaBnJlc3VsdHKzAAAAcu4BAABylgEAAHJ5AAAAcnkAAAByegAAANoIcnVuVGVzdHO4CAAAc1QAAAAKVxgBCgEIAQQBBAEEAQgBHAEKAQIBBAECAQ4BBAECAQwBDgESAQ4BDgESAQgBEgEkARgCEgEIARABCIAOARIBCAEQAQiAAv0EBQQBCgEOARACCAJ6FlBhcnNlckVsZW1lbnQucnVuVGVzdHOpAUapAVRy5QEAACkBcjsCAAByigAAACkFVHKdAgAAVFRGKU9ynQAAAHKeAAAAcp8AAAByygAAAHK5AQAAckECAADaDHN0YXRpY21ldGhvZHK8AQAAcr4BAABysQAAAHL1AAAActcBAABy3AEAAHLoAQAAcoQAAABy7AEAAHLzAQAAcvQBAABy+QEAAHL9AQAAcv8BAAByAgIAAHIKAgAAcgwCAAByDQIAAHLiAAAAciECAAByKwIAAHIuAgAAcjQCAAByBAAAAHIzAgAAcjUCAAByOQIAAHLmAQAAcjoCAAByPAIAAHI+AgAAckQCAADaCF9NQVhfSU5Uck0CAAByhQAAAHJSAgAAcpMAAAByQQEAAHJNAQAAcmECAAByYgIAAHJrAgAAcmwCAABybQIAAHJvAgAAcnACAABycQIAAHJyAgAAcnMCAABydAIAAHJ1AgAAcnYCAAByeQIAAHJ7AgAAcnwCAAByfQIAAHKBAgAAcoMCAAByugAAAHK9AAAAcj8CAAByhQIAAHKHAgAAco4CAABykgIAAHKUAgAAcpcCAABymQIAAHKaAgAAckoCAAByrAIAANoNX19jbGFzc2NlbGxfX3J5AAAAcnkAAABykQIAAHJ6AAAAciYAAABPBAAAc5oAAAAIAAQBBAEEAQICCgECDgoBChQIFwgXCg4KHAgSCCYICggbCA0IDQoMCAMKBAhHCAYQCAgWEgEQHQQdBgEIAQoEBBcCAgoBBAQCAQwBCiIOMghHDCsOGwgWCBQIDAgMCAwIRAgDCAwIDAgMCAwIDAgMCgYIEwgHCAkICQgJCBcKCggpCAMIAwgFDAMKBgwUCAgIAwgDCAMKAxITciYAAABjAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAA8yAAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgSHAAQAWgVTACkEci4AAAB6VAogICAgQWJzdHJhY3QgQ3tQYXJzZXJFbGVtZW50fSBzdWJjbGFzcywgZm9yIGRlZmluaW5nIGF0b21pYyBtYXRjaGluZyBwYXR0ZXJucy4KICAgIGMBAAAAAAAAAAAAAAABAAAAAwAAAAMAAABzFgAAAHQAdAF8AIMCagJkAWQCjQEBAGQAUwCpA05GqQFy0wEAACkDcpACAAByLgAAAHKxAAAAcrkAAABykQIAAHJ5AAAAcnoAAABysQAAAEAJAAByJQEAAHoOVG9rZW4uX19pbml0X1+pBnKdAAAAcp4AAABynwAAAHLKAAAAcrEAAABysQIAAHJ5AAAAcnkAAABykQIAAHJ6AAAAci4AAAA8CQAA8wYAAAAIAAQBFANyLgAAAGMAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABysgIAACkEcg8AAAB6LAogICAgQW4gZW1wdHkgdG9rZW4sIHdpbGwgYWx3YXlzIG1hdGNoLgogICAgYwEAAAAAAAAAAAAAAAEAAAADAAAAAwAAAHMkAAAAdAB0AXwAgwKgAqEAAQBkAXwAXwNkAnwAXwRkA3wAXwVkAFMAKQROcg8AAABURikGcpACAAByDwAAAHKxAAAAcuYAAAByxwEAAHLMAQAAcrkAAABykQIAAHJ5AAAAcnoAAABysQAAAEgJAABzCAAAAA4BBgEGAQoBeg5FbXB0eS5fX2luaXRfX3K1AgAAcnkAAAByeQAAAHKRAgAAcnoAAAByDwAAAEQJAABytgIAAHIPAAAAYwAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAPMqAAAAZQBaAWQAWgJkAVoDhwBmAWQCZAOECFoEZAdkBWQGhAFaBYcABABaBlMAKQhyGQAAAHooCiAgICBBIHRva2VuIHRoYXQgd2lsbCBuZXZlciBtYXRjaC4KICAgIGMBAAAAAAAAAAAAAAABAAAAAwAAAAMAAABzKgAAAHQAdAF8AIMCoAKhAAEAZAF8AF8DZAJ8AF8EZAN8AF8FZAR8AF8GZABTACkFTnIZAAAAVEZ6EVVubWF0Y2hhYmxlIHRva2VuKQdykAIAAHIZAAAAcrEAAABy5gAAAHLHAQAAcswBAAByzQEAAHK5AAAAcpECAAByeQAAAHJ6AAAAcrEAAABTCQAAcwoAAAAOAQYBBgEGAQoBehBOb01hdGNoLl9faW5pdF9fVGMEAAAAAAAAAAAAAAAEAAAABQAAAEMAAABzEAAAAHQAfAF8AnwAagF8AIMEggFyigAAACkCciEAAAByzQEAAHL+AQAAcnkAAAByeQAAAHJ6AAAAcv8BAABaCQAAcwIAAAAQAXoRTm9NYXRjaC5wYXJzZUltcGxyrgIAAKkHcp0AAAByngAAAHKfAAAAcsoAAABysQAAAHL/AQAAcrECAAByeQAAAHJ5AAAAcpECAAByegAAAHIZAAAATwkAAHMIAAAACAAEAQwDEgdyGQAAAGMAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABytwIAACkIchcAAABh0AEAAAogICAgVG9rZW4gdG8gZXhhY3RseSBtYXRjaCBhIHNwZWNpZmllZCBzdHJpbmcuCiAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIExpdGVyYWwoJ2JsYWgnKS5wYXJzZVN0cmluZygnYmxhaCcpICAjIC0+IFsnYmxhaCddCiAgICAgICAgTGl0ZXJhbCgnYmxhaCcpLnBhcnNlU3RyaW5nKCdibGFoZm9vYmxhaCcpICAjIC0+IFsnYmxhaCddCiAgICAgICAgTGl0ZXJhbCgnYmxhaCcpLnBhcnNlU3RyaW5nKCdibGEnKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkICJibGFoIgogICAgCiAgICBGb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgdXNlIEx7Q2FzZWxlc3NMaXRlcmFsfS4KICAgIAogICAgRm9yIGtleXdvcmQgbWF0Y2hpbmcgKGZvcmNlIHdvcmQgYnJlYWsgYmVmb3JlIGFuZCBhZnRlciB0aGUgbWF0Y2hlZCBzdHJpbmcpLAogICAgdXNlIEx7S2V5d29yZH0gb3IgTHtDYXNlbGVzc0tleXdvcmR9LgogICAgYwIAAAAAAAAAAAAAAAIAAAAIAAAAAwAAAHOCAAAAdAB0AXwAgwKgAqEAAQB8AXwAXwN0BHwBgwF8AF8Fegd8AWQBGQB8AF8GVwBuFAQAdAd5KgEAAQABAHQIaglkAnQKZANkBI0DAQB0C3wAXwxZAG4BdwBkBXQNfABqA4MBFgB8AF8OZAZ8AGoOFwB8AF8PZAd8AF8QZAd8AF8RZABTACkITnIBAAAAejJudWxsIHN0cmluZyBwYXNzZWQgdG8gTGl0ZXJhbDsgdXNlIEVtcHR5KCkgaW5zdGVhZHJzAAAAclkCAAD6BCIlcyJy1QEAAEYpEnKQAgAAchcAAABysQAAANoFbWF0Y2hyBQEAANoIbWF0Y2hMZW7aDmZpcnN0TWF0Y2hDaGFycvgAAAByWwIAAHJcAgAAcl0CAAByDwAAAHKwAQAAcokAAABy5gAAAHLNAQAAcscBAAByzAEAAKkCcq8AAADaC21hdGNoU3RyaW5ncpECAAByeQAAAHJ6AAAAcrEAAABsCQAAcx4AAAAOAQYBCgECAQ4BDAEGAQQBBv8KAgL9EAQMAQYBCgF6EExpdGVyYWwuX19pbml0X19UYwQAAAAAAAAAAAAAAAQAAAAFAAAAQwAAAHNGAAAAfAF8AhkAfABqAGsCcht8AGoBZAFrAnMTfAGgAnwAagN8AqECcht8AnwAagEXAHwAagNmAlMAdAR8AXwCfABqBXwAgwSCAXL6AQAAKQZyvAIAAHK7AgAA2gpzdGFydHN3aXRocroCAAByIQAAAHLNAQAAcv4BAAByeQAAAHJ5AAAAcnoAAABy/wEAAH8JAABzDgAAAA4BCAEC/wwBAv8QAhABehFMaXRlcmFsLnBhcnNlSW1wbHKuAgAAcrgCAAByeQAAAHJ5AAAAcpECAAByegAAAHIXAAAAXgkAAHMIAAAACAAEAQwNEhNyFwAAAGMAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABzTAAAAGUAWgFkAFoCZAFaA2UEZAIXAFoFZA6HAGYBZAVkBoQJWgZkD2QIZAmEAVoHhwBmAWQKZAuECFoIZQlkDGQNhACDAVoKhwAEAFoLUwApEHIUAAAAYVwDAAAKICAgIFRva2VuIHRvIGV4YWN0bHkgbWF0Y2ggYSBzcGVjaWZpZWQgc3RyaW5nIGFzIGEga2V5d29yZCwgdGhhdCBpcywgaXQgbXVzdCBiZQogICAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBub24ta2V5d29yZCBjaGFyYWN0ZXIuICBDb21wYXJlIHdpdGggQ3tMe0xpdGVyYWx9fToKICAgICAtIEN7TGl0ZXJhbCgiaWYiKX0gd2lsbCBtYXRjaCB0aGUgbGVhZGluZyBDeydpZid9IGluIEN7J2lmQW5kT25seUlmJ30uCiAgICAgLSBDe0tleXdvcmQoImlmIil9IHdpbGwgbm90OyBpdCB3aWxsIG9ubHkgbWF0Y2ggdGhlIGxlYWRpbmcgQ3snaWYnfSBpbiBDeydpZiB4PTEnfSwgb3IgQ3snaWYoeT09MiknfQogICAgQWNjZXB0cyB0d28gb3B0aW9uYWwgY29uc3RydWN0b3IgYXJndW1lbnRzIGluIGFkZGl0aW9uIHRvIHRoZSBrZXl3b3JkIHN0cmluZzoKICAgICAtIEN7aWRlbnRDaGFyc30gaXMgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIHZhbGlkIGlkZW50aWZpZXIgY2hhcmFjdGVycywKICAgICAgICAgIGRlZmF1bHRpbmcgdG8gYWxsIGFscGhhbnVtZXJpY3MgKyAiXyIgYW5kICIkIgogICAgIC0gQ3tjYXNlbGVzc30gYWxsb3dzIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcsIGRlZmF1bHQgaXMgQ3tGYWxzZX0uCiAgICAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIEtleXdvcmQoInN0YXJ0IikucGFyc2VTdHJpbmcoInN0YXJ0IikgICMgLT4gWydzdGFydCddCiAgICAgICAgS2V5d29yZCgic3RhcnQiKS5wYXJzZVN0cmluZygic3RhcnRpbmciKSAgIyAtPiBFeGNlcHRpb24KCiAgICBGb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgdXNlIEx7Q2FzZWxlc3NLZXl3b3JkfS4KICAgIPoCXyRORmMEAAAAAAAAAAAAAAAEAAAACAAAAAMAAABzrAAAAHQAdAF8AIMCoAKhAAEAfAJkAHUAcg50AWoDfQJ8AXwAXwR0BXwBgwF8AF8Gegd8AWQBGQB8AF8HVwBuEQQAdAh5LgEAAQABAHQJagpkAnQLZANkBI0DAQBZAG4BdwBkBXwAagQWAHwAXwxkBnwAagwXAHwAXw1kB3wAXw5kB3wAXw98A3wAXxB8A3JPfAGgEaEAfABfEnwCoBGhAH0CdBN8AoMBfABfFGQAUwApCE5yAQAAAHoybnVsbCBzdHJpbmcgcGFzc2VkIHRvIEtleXdvcmQ7IHVzZSBFbXB0eSgpIGluc3RlYWRycwAAAHJZAgAAcrkCAABy1QEAAEYpFXKQAgAAchQAAABysQAAANoVREVGQVVMVF9LRVlXT1JEX0NIQVJTcroCAAByBQEAAHK7AgAAcrwCAABy+AAAAHJbAgAAclwCAAByXQIAAHLmAAAAcs0BAAByxwEAAHLMAQAA2ghjYXNlbGVzc9oFdXBwZXLaDWNhc2VsZXNzbWF0Y2hyGAIAANoKaWRlbnRDaGFycykEcq8AAAByvgIAAHLFAgAAcsICAABykQIAAHJ5AAAAcnoAAABysQAAAJoJAABzKgAAAA4BCAEGAQYBCgECAQ4BDAEGAQQBCv8C/wwDDAEGAQYBBgEEAQoBCAEOAXoQS2V5d29yZC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABAAAAAUAAABDAAAAcwIBAAB8AGoAcj58AXwCfAJ8AGoBFwCFAhkAoAKhAHwAagNrAnI9fAJ0BHwBgwF8AGoBGABrBXMmfAF8AnwAagEXABkAoAKhAHwAagV2AXI9fAJkAWsCczV8AXwCZAIYABkAoAKhAHwAagV2AXI9fAJ8AGoBFwB8AGoGZgJTAG47fAF8AhkAfABqB2sCcnl8AGoBZAJrAnNRfAGgCHwAagZ8AqECcnl8AnQEfAGDAXwAagEYAGsFc2R8AXwCfABqARcAGQB8AGoFdgFyeXwCZAFrAnNxfAF8AmQCGAAZAHwAagV2AXJ5fAJ8AGoBFwB8AGoGZgJTAHQJfAF8AnwAagp8AIMEggFyBAEAACkLcsICAAByuwIAAHLDAgAAcsQCAAByBQEAAHLFAgAAcroCAAByvAIAAHK/AgAAciEAAAByzQEAAHL+AQAAcnkAAAByeQAAAHJ6AAAAcv8BAACvCQAAczYAAAAGARwBEAEC/xYBAv8GAgL+FAIC/hADAoAOAggBAv8MAQL/EAIC/hICAv4GAwL9EAMC/RAEEAF6EUtleXdvcmQucGFyc2VJbXBsYwEAAAAAAAAAAAAAAAIAAAADAAAAAwAAAHMaAAAAdAB0AXwAgwKgAqEAfQF0AWoDfAFfBHwBUwByigAAACkFcpACAAByFAAAAHL1AAAAcsECAAByxQIAACkCcq8AAABypwAAAHKRAgAAcnkAAAByegAAAHL1AAAAvQkAAHMGAAAADgEIAQQBegxLZXl3b3JkLmNvcHljAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcrgBAAApAnosT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IEtleXdvcmQgY2hhcnMKICAgICAgICBOKQJyFAAAAHLBAgAAcroBAAByeQAAAHJ5AAAAcnoAAADaFnNldERlZmF1bHRLZXl3b3JkQ2hhcnPCCQAAcwIAAAAKBHoeS2V5d29yZC5zZXREZWZhdWx0S2V5d29yZENoYXJzciUCAAByrgIAACkMcp0AAAByngAAAHKfAAAAcsoAAAByNQAAAHLBAgAAcrEAAABy/wEAAHL1AAAAcq8CAAByxgIAAHKxAgAAcnkAAAByeQAAAHKRAgAAcnoAAAByFAAAAIcJAABzEAAAAAgABAEIEA4CChUMDgIFEgFyFAAAAGMAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABytwIAACkIcgoAAABhbAEAAAogICAgVG9rZW4gdG8gbWF0Y2ggYSBzcGVjaWZpZWQgc3RyaW5nLCBpZ25vcmluZyBjYXNlIG9mIGxldHRlcnMuCiAgICBOb3RlOiB0aGUgbWF0Y2hlZCByZXN1bHRzIHdpbGwgYWx3YXlzIGJlIGluIHRoZSBjYXNlIG9mIHRoZSBnaXZlbgogICAgbWF0Y2ggc3RyaW5nLCBOT1QgdGhlIGNhc2Ugb2YgdGhlIGlucHV0IHRleHQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgT25lT3JNb3JlKENhc2VsZXNzTGl0ZXJhbCgiQ01EIikpLnBhcnNlU3RyaW5nKCJjbWQgQ01EIENtZDEwIikgIyAtPiBbJ0NNRCcsICdDTUQnLCAnQ01EJ10KICAgICAgICAKICAgIChDb250cmFzdCB3aXRoIGV4YW1wbGUgZm9yIEx7Q2FzZWxlc3NLZXl3b3JkfS4pCiAgICBjAgAAAAAAAAAAAAAAAgAAAAQAAAADAAAAczYAAAB0AHQBfACDAqACfAGgA6EAoQEBAHwBfABfBGQBfABqBBYAfABfBWQCfABqBRcAfABfBmQAUwApA056BCclcydy1QEAACkHcpACAAByCgAAAHKxAAAAcsMCAADaDHJldHVyblN0cmluZ3LmAAAAcs0BAAByvQIAAHKRAgAAcnkAAAByegAAAHKxAAAA0wkAAHMIAAAAFAEGAgwBEAF6GENhc2VsZXNzTGl0ZXJhbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABAAAAAUAAABDAAAAczwAAAB8AXwCfAJ8AGoAFwCFAhkAoAGhAHwAagJrAnIWfAJ8AGoAFwB8AGoDZgJTAHQEfAF8AnwAagV8AIMEggFyigAAACkGcrsCAABywwIAAHK6AgAAcscCAAByIQAAAHLNAQAAcv4BAAByeQAAAHJ5AAAAcnoAAABy/wEAANoJAABzBgAAABwBEAEQAXoZQ2FzZWxlc3NMaXRlcmFsLnBhcnNlSW1wbHKuAgAAcrgCAAByeQAAAHJ5AAAAcpECAAByegAAAHIKAAAAyAkAAHMIAAAACAAEAQwKEgdyCgAAAGMAAAAAAAAAAAAAAAAAAAAABAAAAAAAAADzLAAAAGUAWgFkAFoCZAFaA2QIhwBmAWQDZASECVoEZAlkBmQHhAFaBYcABABaBlMAKQpyCQAAAHrQCiAgICBDYXNlbGVzcyB2ZXJzaW9uIG9mIEx7S2V5d29yZH0uCgogICAgRXhhbXBsZTo6CiAgICAgICAgT25lT3JNb3JlKENhc2VsZXNzS2V5d29yZCgiQ01EIikpLnBhcnNlU3RyaW5nKCJjbWQgQ01EIENtZDEwIikgIyAtPiBbJ0NNRCcsICdDTUQnXQogICAgICAgIAogICAgKENvbnRyYXN0IHdpdGggZXhhbXBsZSBmb3IgTHtDYXNlbGVzc0xpdGVyYWx9LikKICAgIE5jAwAAAAAAAAAAAAAAAwAAAAUAAAADAAAAcxoAAAB0AHQBfACDAmoCfAF8AmQBZAKNAwEAZABTACkDTlSpAXLCAgAAKQNykAIAAHIJAAAAcrEAAAApA3KvAAAAcr4CAAByxQIAAHKRAgAAcnkAAAByegAAAHKxAAAA6AkAAHMCAAAAGgF6GENhc2VsZXNzS2V5d29yZC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABAAAAAUAAABDAAAAc2YAAAB8AXwCfAJ8AGoAFwCFAhkAoAGhAHwAagJrAnIrfAJ0A3wBgwF8AGoAGABrBXMjfAF8AnwAagAXABkAoAGhAHwAagR2AXIrfAJ8AGoAFwB8AGoFZgJTAHQGfAF8AnwAagd8AIMEggFyigAAACkIcrsCAABywwIAAHLEAgAAcgUBAAByxQIAAHK6AgAAciEAAAByzQEAAHL+AQAAcnkAAAByeQAAAHJ6AAAAcv8BAADrCQAAcw4AAAAcARABAv8WAQL/EAIQAXoZQ2FzZWxlc3NLZXl3b3JkLnBhcnNlSW1wbHKKAAAAcq4CAAByuAIAAHJ5AAAAcnkAAABykQIAAHJ6AAAAcgkAAADfCQAAcwgAAAAIAAQBDggSA3IJAAAAYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHLIAgAAKQpybgAAAGF4BQAACiAgICBBIHZhcmlhdGlvbiBvbiBMe0xpdGVyYWx9IHdoaWNoIG1hdGNoZXMgImNsb3NlIiBtYXRjaGVzLCB0aGF0IGlzLCAKICAgIHN0cmluZ3Mgd2l0aCBhdCBtb3N0ICduJyBtaXNtYXRjaGluZyBjaGFyYWN0ZXJzLiBDe0Nsb3NlTWF0Y2h9IHRha2VzIHBhcmFtZXRlcnM6CiAgICAgLSBDe21hdGNoX3N0cmluZ30gLSBzdHJpbmcgdG8gYmUgbWF0Y2hlZAogICAgIC0gQ3ttYXhNaXNtYXRjaGVzfSAtIChDe2RlZmF1bHQ9MX0pIG1heGltdW0gbnVtYmVyIG9mIG1pc21hdGNoZXMgYWxsb3dlZCB0byBjb3VudCBhcyBhIG1hdGNoCiAgICAKICAgIFRoZSByZXN1bHRzIGZyb20gYSBzdWNjZXNzZnVsIHBhcnNlIHdpbGwgY29udGFpbiB0aGUgbWF0Y2hlZCB0ZXh0IGZyb20gdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIGZvbGxvd2luZyBuYW1lZCByZXN1bHRzOgogICAgIC0gQ3ttaXNtYXRjaGVzfSAtIGEgbGlzdCBvZiB0aGUgcG9zaXRpb25zIHdpdGhpbiB0aGUgbWF0Y2hfc3RyaW5nIHdoZXJlIG1pc21hdGNoZXMgd2VyZSBmb3VuZAogICAgIC0gQ3tvcmlnaW5hbH0gLSB0aGUgb3JpZ2luYWwgbWF0Y2hfc3RyaW5nIHVzZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBpbnB1dCBzdHJpbmcKICAgIAogICAgSWYgQ3ttaXNtYXRjaGVzfSBpcyBhbiBlbXB0eSBsaXN0LCB0aGVuIHRoZSBtYXRjaCB3YXMgYW4gZXhhY3QgbWF0Y2guCiAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFYR0dBIikgIyAtPiAoWydBVENBVENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVhDR0FBWEdHQSIpICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCAnQVRDQVRDR0FBVEdHQScgKHdpdGggdXAgdG8gMSBtaXNtYXRjaGVzKSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICMgZXhhY3QgbWF0Y2gKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFUR0dBIikgIyAtPiAoWydBVENBVENHQUFUR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbXV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKCiAgICAgICAgIyBjbG9zZSBtYXRjaCBhbGxvd2luZyB1cCB0byAyIG1pc21hdGNoZXMKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIsIG1heE1pc21hdGNoZXM9MikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiAoWydBVENBWENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbNCwgOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICByjgAAAGMDAAAAAAAAAAAAAAADAAAAAwAAAAMAAABzQgAAAHQAdAF8AIMCoAKhAAEAfAF8AF8DfAF8AF8EfAJ8AF8FZAF8AGoEfABqBWYCFgB8AF8GZAJ8AF8HZAJ8AF8IZABTACkDTnomRXhwZWN0ZWQgJXIgKHdpdGggdXAgdG8gJWQgbWlzbWF0Y2hlcylGKQlykAIAAHJuAAAAcrEAAABy5gAAANoMbWF0Y2hfc3RyaW5n2g1tYXhNaXNtYXRjaGVzcs0BAAByzAEAAHLHAQAAKQNyrwAAAHLKAgAAcssCAABykQIAAHJ5AAAAcnoAAABysQAAAAoKAABzDgAAAA4BBgEGAQYBEgEGAQoBehNDbG9zZU1hdGNoLl9faW5pdF9fVGMEAAAAAAAAAAAAAAAPAAAABQAAAEMAAABzxgAAAHwCfQR0AHwBgwF9BXwEdAB8AGoBgwEXAH0GfAZ8BWsBclt8AGoBfQdkAX0IZwB9CXwAagJ9CnQDdAR8AXwCfAaFAhkAfABqAYMCgwFEAF0ZXAJ9CH0LfAtcAn0MfQ18DHwNawNyQHwJoAV8CKEBAQB0AHwJgwF8CmsEckABAG4bcSd8CGQCFwB9AnQGfAF8BHwChQIZAGcBgwF9DnwAagF8DmQDPAB8CXwOZAQ8AHwCfA5mAlMAdAd8AXwCfABqCHwAgwSCASkFTnIBAAAAco4AAADaCG9yaWdpbmFs2gptaXNtYXRjaGVzKQlyBQEAAHLKAgAAcssCAAByCgEAAHKUAAAAcjgBAAByJAAAAHIhAAAAcs0BAAApD3KvAAAAco8BAAByqgAAAHLfAQAA2gVzdGFydHL8AQAA2gZtYXhsb2NyygIAANoPbWF0Y2hfc3RyaW5nbG9jcs0CAAByywIAANoDc19t2gNzcmPaA21hdNoHcmVzdWx0c3J5AAAAcnkAAAByegAAAHL/AQAAEwoAAHMqAAAABAEIAQ4BCAIGAQQBBAEGASACCAEIAQoBDAEEAQKACAISAQoBCAEIARACehRDbG9zZU1hdGNoLnBhcnNlSW1wbCkBco4AAAByrgIAAHK4AgAAcnkAAAByeQAAAHKRAgAAcnoAAABybgAAAPEJAABzCAAAAAgABAEOGBIJcm4AAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAczgAAABlAFoBZABaAmQBWgNkDYcAZgFkBmQHhAlaBGQOZAlkCoQBWgWHAGYBZAtkDIQIWgaHAAQAWgdTACkPcjEAAABhFAkAAAogICAgVG9rZW4gZm9yIG1hdGNoaW5nIHdvcmRzIGNvbXBvc2VkIG9mIGFsbG93ZWQgY2hhcmFjdGVyIHNldHMuCiAgICBEZWZpbmVkIHdpdGggc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGFsbG93ZWQgaW5pdGlhbCBjaGFyYWN0ZXJzLAogICAgYW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgYWxsb3dlZCBib2R5IGNoYXJhY3RlcnMgKGlmIG9taXR0ZWQsCiAgICBkZWZhdWx0cyB0byB0aGUgaW5pdGlhbCBjaGFyYWN0ZXIgc2V0KSwgYW5kIGFuIG9wdGlvbmFsIG1pbmltdW0sCiAgICBtYXhpbXVtLCBhbmQvb3IgZXhhY3QgbGVuZ3RoLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIEN7bWlufSBpcyAxIChhCiAgICBtaW5pbXVtIHZhbHVlIDwgMSBpcyBub3QgdmFsaWQpOyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIEN7bWF4fSBhbmQgQ3tleGFjdH0KICAgIGFyZSAwLCBtZWFuaW5nIG5vIG1heGltdW0gb3IgZXhhY3QgbGVuZ3RoIHJlc3RyaWN0aW9uLiBBbiBvcHRpb25hbAogICAgQ3tleGNsdWRlQ2hhcnN9IHBhcmFtZXRlciBjYW4gbGlzdCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgZm91bmQgaW4gCiAgICB0aGUgaW5wdXQgQ3tib2R5Q2hhcnN9IHN0cmluZzsgdXNlZnVsIHRvIGRlZmluZSBhIHdvcmQgb2YgYWxsIHByaW50YWJsZXMKICAgIGV4Y2VwdCBmb3Igb25lIG9yIHR3byBjaGFyYWN0ZXJzLCBmb3IgaW5zdGFuY2UuCiAgICAKICAgIEx7c3JhbmdlfSBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MgZm9yIGRlZmluaW5nIAogICAgQ3tXb3JkfSBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbSByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVyIHNldHMuCiAgICAKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIEN7V29yZH0gdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsIHN0cmluZywgYXMgaW4gCiAgICBDe1dvcmQoIkFkZHJlc3MiKX0uIFJlbWVtYmVyIHRoYXQgQ3tXb3JkfSB1c2VzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGVmaW5lCiAgICBJe3NldHN9IG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLiBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLAogICAgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuCiAgICBUbyBtYXRjaCBhbiBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIEx7TGl0ZXJhbH0gb3IgTHtLZXl3b3JkfS4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgogICAgIC0gTHthbHBoYXN9CiAgICAgLSBMe251bXN9CiAgICAgLSBMe2FscGhhbnVtc30KICAgICAtIEx7aGV4bnVtc30KICAgICAtIEx7YWxwaGFzOGJpdH0gKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAgLSBMe3B1bmM4Yml0fSAobm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0gTHtwcmludGFibGVzfSAoYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcikKCiAgICBFeGFtcGxlOjoKICAgICAgICAjIGEgd29yZCBjb21wb3NlZCBvZiBkaWdpdHMKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKSAjIGVxdWl2YWxlbnQgdG8gV29yZCgiMDEyMzQ1Njc4OSIpIG9yIFdvcmQoc3JhbmdlKCIw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LgogICAgCiAgICBEZWZpbmVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogICAgICAgIC0gcXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlIHF1b3RlIGRlbGltaXRpbmcgc3RyaW5nCiAgICAgICAgLSBlc2NDaGFyIC0gY2hhcmFjdGVyIHRvIGVzY2FwZSBxdW90ZXMsIHR5cGljYWxseSBiYWNrc2xhc2ggKGRlZmF1bHQ9Q3tOb25lfSkKICAgICAgICAtIGVzY1F1b3RlIC0gc3BlY2lhbCBxdW90ZSBzZXF1ZW5jZSB0byBlc2NhcGUgYW4gZW1iZWRkZWQgcXVvdGUgc3RyaW5nIChzdWNoIGFzIFNRTCdzICIiIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCAiKSAoZGVmYXVsdD1De05vbmV9KQogICAgICAgIC0gbXVsdGlsaW5lIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgcXVvdGVzIGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzIChkZWZhdWx0PUN7RmFsc2V9KQogICAgICAgIC0gdW5xdW90ZVJlc3VsdHMgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWF0Y2hlZCB0ZXh0IHNob3VsZCBiZSB1bnF1b3RlZCAoZGVmYXVsdD1De1RydWV9KQogICAgICAgIC0gZW5kUXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlIGVuZCBvZiB0aGUgcXVvdGUgZGVsaW1pdGVkIHN0cmluZyAoZGVmYXVsdD1De05vbmV9ID0+IHNhbWUgYXMgcXVvdGVDaGFyKQogICAgICAgIC0gY29udmVydFdoaXRlc3BhY2VFc2NhcGVzIC0gY29udmVydCBlc2NhcGVkIHdoaXRlc3BhY2UgKEN7J1x0J30sIEN7J1xuJ30sIGV0Yy4pIHRvIGFjdHVhbCB3aGl0ZXNwYWNlIChkZWZhdWx0PUN7VHJ1ZX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgcXMgPSBRdW90ZWRTdHJpbmcoJyInKQogICAgICAg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RSBZRUxMT1cgR1JFRU4gQkxVRSBQVVJQTEUgQkxBQ0sgV0hJVEUgQlJPV04iKQogICAgICAgIHNoYXBlX3R5cGUgPSBvbmVPZigiU1FVQVJFIENJUkNMRSBUUklBTkdMRSBTVEFSIEhFWEFHT04gT0NUQUdPTiIpCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBzaGFwZV9hdHRyID0gInNoYXBlOiIgKyBzaGFwZV90eXBlKCJzaGFwZSIpCiAgICAgICAgcG9zbl9hdHRyID0gInBvc246IiArIEdyb3VwKGludGVnZXIoIngiKSArICcsJyArIGludGVnZXIoInkiKSkoInBvc24iKQogICAgICAgIGNvbG9yX2F0dHIgPSAiY29sb3I6IiArIGNvbG9yKCJjb2xvciIpCiAgICAgICAgc2l6ZV9hdHRyID0gInNpemU6IiArIGludGVnZXIoInNpemUiKQoKICAgICAgICAjIHVzZSBFYWNoICh1c2luZyBvcGVyYXRvciAnJicpIHRvIGFjY2VwdCBhdHRyaWJ1dGVzIGluIGFueSBvcmRlciAKICAgICAgICAjIChzaGFwZSBhbmQgcG9zbiBhcmUgcmVxdWlyZWQsIGNvbG9yIGFuZCBzaXplIGFyZSBvcHRpb25hbCkKICAgICAgICBzaGFwZV9zcGVjID0gc2hhcGVfYXR0ciAmIHBvc25fYXR0ciAmIE9wdGlvbmFsKGNvbG9yX2F0dHIpICYgT3B0aW9uYWwoc2l6ZV9hdHRyKQoKICAgICAgICBzaGFwZV9zcGVjLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgICAgIGNvbG9yOkdSRUVOIHNpemU6MjAgc2hhcGU6VFJJQU5HTEUgcG9zbjoyMCw0MAogICAgICAgICAgICAnJycKICAgICAgICAgICAgKQogICAgcHJpbnRzOjoKICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgIFsnc2hhcGU6JywgJ1NRVUFSRScsICdjb2xvcjonLCAnQkxBQ0snLCAncG9zbjonLCBbJzEwMCcsICcsJywgJzEyMCddXQogICAgICAgIC0gY29sb3I6IEJMQUNLCiAgICAgICAgLSBwb3NuOiBbJzEwMCcsICcsJywgJzEyMCddCiAgICAgICAgICAtIHg6IDEwMAogICAgICAgICAgLSB5OiAxMjAKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKCgogICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICBbJ3NoYXBlOicsICdDSVJDTEUnLCAnc2l6ZTonLCAnNTAnLCAnY29sb3I6JywgJ0JMVUUnLCAncG9zbjonLCBbJzUwJywgJywnLCAnODAnXV0KICAgICAgICAtIGNvbG9yOiBCTFVFCiAgICAgICAgLSBwb3NuOiBbJzUwJywgJywnLCAnODAnXQogICAgICAgICAgLSB4OiA1MAogICAgICAgICAgLSB5OiA4MAogICAgICAgIC0gc2hhcGU6IENJUkNMRQogICAgICAgIC0gc2l6ZTogNTAKCgogICAgICAgIGNvbG9yOiBHUkVFTiBzaXplOiAyMCBzaGFwZTogVFJJQU5HTEUgcG9zbjogMjAsNDAKICAgICAgICBbJ2NvbG9yOicsICdHUkVFTicsICdzaXplOicsICcyMCcsICdzaGFwZTonLCAnVFJJQU5HTEUnLCAncG9zbjonLCBbJzIwJywgJywnLCAnNDAnXV0KICAgICAgICAtIGNvbG9yOiBHUkVFTgogICAgICAgIC0gcG9zbjogWycyMCcsICcsJywgJzQwJ10KICAgICAgICAgIC0geDogMjAKICAgICAgICAgIC0geTogNDAKICAgICAgICAtIHNoYXBlOiBUUklBTkdMRQogICAgICAgIC0gc2l6ZTogMjAKICAgIFRjAwAAAAAAAAAAAAAAAwAAAAQAAAADAAAAczgAAAB0AHQBfACDAqACfAF8AqECAQB0A2QBZAKEAHwAagREAIMBgwF8AF8FZAN8AF8GZAN8AF8HZABTACkETmMBAAAAAAAAAAAAAAACAAAAAgAAAHMAAAByMgMA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Y2ggb25lIG9yIG1vcmUgdGltZXMKICAgICAtIHN0b3BPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24gCiAgICAgICAgICBleHByZXNzaW9uKSAgICAgICAgICAKCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IEJMQUNLIgogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICAjIEZhaWwhIHJlYWQgJ2NvbG9yJyBhcyBkYXRhIGluc3RlYWQgb2YgbmV4dCBsYWJlbCAtPiBbWydzaGFwZScsICdTUVVBUkUgY29sb3InXV0KCiAgICAgICAgIyB1c2Ugc3RvcE9uIGF0dHJpYnV0ZSBmb3IgT25lT3JNb3JlIHRvIGF2b2lkIHJlYWRpbmcgbGFiZWwgc3RyaW5nIGFzIHBhcnQgb2YgdGhlIGRhdGEKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAjIEJldHRlciAtPiBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3Nu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LgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBVUyBwb3N0YWwgY29kZSBjYW4gYmUgYSA1LWRpZ2l0IHppcCwgcGx1cyBvcHRpb25hbCA0LWRpZ2l0IHF1YWxpZmllcgogICAgICAgIHppcCA9IENvbWJpbmUoV29yZChudW1zLCBleGFjdD01KSArIE9wdGlvbmFsKCctJyArIFdvcmQobnVtcywgZXhhY3Q9NCkpKQogICAgICAgIHppcC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgICAgICAxMjM0NQogICAgICAgICAgICAKICAgICAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgICAgIDEyMTAxLTAwMDEKICAgICAgICAgICAgCiAgICAgICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMuAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQB8AGoDagR8AF8EfAJ8AF8FZAN8AF8GZABTACkETkZytAIAAFQpB3KQAgAAch0AAABysQAAAHKQAQAAcsMBAAByNQEAAHLHAQAAKQNyrwAAAHKQAQAAci8BAABykQIAAHJ5AAAAcnoAAABysQAAAJ0PAABzCAAAABQBCgEGAQoBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABQAAAAkAAABDAAAAc5AAAAB6EXwAagBqAXwBfAJ8A2QBZAKNBFwCfQJ9BFcAfAJ8BGYCUwAEAHQCdANmAnlHAQABAAEAfABqBHQFdQFyNnwAagBqBnIxdAd8AGoEZwGDAX0EfABqBHwEfABqAGoGPABuEXwAagRnAX0EbgdnAH0EWQB8AnwEZgJTAFkAfAJ8BGYCUwBZAHwCfARmAlMAdwByegMAACkIcpABAABy5gEAAHIhAAAAcvgAAAByNQEAANoTX29wdGlvbmFsTm90TWF0Y2hlZHLCAQAAciQAAAApBXKvAAAAco8BAAByqgAAAHLfAQAAcgcCAAByeQAAAHJ5AAAAcnoAAABy/wEAAKMPAABzIAAAAAIBGgEIChD3CgEIAQwBEAEKAgYCCAEC/QgDAvsIBQL3ehJPcHRpb25hbC5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcnMDAAApBE5y5gAAAHJPAQAAclIBAABydAMAAHK5AAAAcnkAAAByeQAAAHJ6AAAAcroAAACxDwAAcnUDAAB6EE9wdGlvbmFsLl9fc3RyX19yrgIAACkJcp0AAAByngAAAHKfAAAAcsoAAABygwMAAHKxAAAAcv8BAAByugAAAHKxAgAAcnkAAAByeQAAAHKRAgAAcnoAAAByHQAAAHoPAABzCgAAAAgABAEQIgoGEA5yHQAAAGMAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABzLAAAAGUAWgFkAFoCZAFaA2QJhwBmAWQEZAWECVoEZApkB2QIhAFaBYcABABaBlMAKQtyKgAAAGH/CQAACiAgICBUb2tlbiBmb3Igc2tpcHBpbmcgb3ZlciBhbGwgdW5kZWZpbmVkIHRleHQgdW50aWwgdGhlIG1hdGNoZWQgZXhwcmVzc2lvbiBpcyBmb3VuZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIHRhcmdldCBleHByZXNzaW9uIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgZGF0YSB0byBiZSBza2lwcGVkCiAgICAgLSBpbmNsdWRlIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGlmIFRydWUsIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBhbHNvIHBhcnNlZCAKICAgICAgICAgICh0aGUgc2tpcHBlZCB0ZXh0IGFuZCB0YXJnZXQgZXhwcmVzc2lvbiBhcmUgcmV0dXJuZWQgYXMgYSAyLWVsZW1lbnQgbGlzdCkuCiAgICAgLSBpZ25vcmUgLSAoZGVmYXVsdD1De05vbmV9KSB1c2VkIHRvIGRlZmluZSBncmFtbWFycyAodHlwaWNhbGx5IHF1b3RlZCBzdHJpbmdzIGFuZCAKICAgICAgICAgIGNvbW1lbnRzKSB0aGF0IG1pZ2h0IGNvbnRhaW4gZmFsc2UgbWF0Y2hlcyB0byB0aGUgdGFyZ2V0IGV4cHJlc3Npb24KICAgICAtIGZhaWxPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBiZSAKICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBza2lwcGVkIHRlc3Q7IGlmIGZvdW5kIGJlZm9yZSB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgZm91bmQsIAogICAgICAgICAgdGhlIFNraXBUbyBpcyBub3QgYSBtYXRjaAoKICAgIEV4YW1wbGU6OgogICAgICAgIHJlcG9ydCA9ICcnJwogICAgICAgICAgICBPdXRzdGFuZGluZyBJc3N1ZXMgUmVwb3J0IC0gMSBKYW4gMjAwMAoKICAgICAgICAgICAgICAgIyB8IFNldmVyaXR5IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGF5cyBPcGVuCiAgICAgICAgICAgIC0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQogICAgICAgICAgICAgMTAxIHwgQ3JpdGljYWwgfCBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoICAgICAgICAgICAgICAgICB8ICAgICAgICAgIDYKICAgICAgICAgICAgICA5NCB8IENvc21ldGljIHwgU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpICAgICAgICAgfCAgICAgICAgIDE0CiAgICAgICAgICAgICAgNzkgfCBNaW5vciAgICB8IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzIHwgICAgICAgICA0NwogICAgICAgICAgICAnJycKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIFNFUCA9IFN1cHByZXNzKCd8JykKICAgICAgICAjIHVzZSBTa2lwVG8gdG8gc2ltcGx5IG1hdGNoIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIG5leHQgU0VQCiAgICAgICAgIyAtIGlnbm9yZSBxdW90ZWQgc3RyaW5ncywgc28gdGhhdCBhICd8JyBjaGFyYWN0ZXIgaW5zaWRlIGEgcXVvdGVkIHN0cmluZyBkb2VzIG5vdCBtYXRjaAogICAgICAgICMgLSBwYXJzZSBhY3Rpb24gd2lsbCBjYWxsIHRva2VuLnN0cmlwKCkgZm9yIGVhY2ggbWF0Y2hlZCB0b2tlbiwgaS5lLiwgdGhlIGRlc2NyaXB0aW9uIGJvZHkKICAgICAgICBzdHJpbmdfZGF0YSA9IFNraXBUbyhTRVAsIGlnbm9yZT1xdW90ZWRTdHJpbmcpCiAgICAgICAgc3RyaW5nX2RhdGEuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnN0cmlwKSkKICAgICAgICB0aWNrZXRfZXhwciA9IChpbnRlZ2VyKCJpc3N1ZV9udW0iKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoInNldiIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyKCJkYXlzX29wZW4iKSkKICAgICAgICAKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAg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CocAZgFkEWQShAhaC4cABABaDFMAKRRyEQAAAGFLAwAACiAgICBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGFuIGV4cHJlc3Npb24gdG8gYmUgZGVmaW5lZCBsYXRlciAtCiAgICB1c2VkIGZvciByZWN1cnNpdmUgZ3JhbW1hcnMsIHN1Y2ggYXMgYWxnZWJyYWljIGluZml4IG5vdGF0aW9uLgogICAgV2hlbiB0aGUgZXhwcmVzc2lvbiBpcyBrbm93biwgaXQgaXMgYXNzaWduZWQgdG8gdGhlIEN7Rm9yd2FyZH0gdmFyaWFibGUgdXNpbmcgdGhlICc8PCcgb3BlcmF0b3IuCgogICAgTm90ZTogdGFrZSBjYXJlIHdoZW4gYXNzaWduaW5nIHRvIEN7Rm9yd2FyZH0gbm90IHRvIG92ZXJsb29rIHByZWNlZGVuY2Ugb2Ygb3BlcmF0b3JzLgogICAgU3BlY2lmaWNhbGx5LCAnfCcgaGFzIGEgbG93ZXIgcHJlY2VkZW5jZSB0aGFuICc8PCcsIHNvIHRoYXQ6OgogICAgICAgIGZ3ZEV4cHIgPDwgYSB8IGIgfCBjCiAgICB3aWxsIGFjdHVhbGx5IGJlIGV2YWx1YXRlZCBhczo6CiAgICAgICAgKGZ3ZEV4cHIgPDwgYSkgfCBiIHwgYwogICAgdGhlcmVieSBsZWF2aW5nIGIgYW5kIGMgb3V0IGFzIHBhcnNlYWJsZSBhbHRlcm5hdGl2ZXMuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdQogICAgZXhwbGljaXRseSBncm91cCB0aGUgdmFsdWVzIGluc2VydGVkIGludG8gdGhlIEN7Rm9yd2FyZH06OgogICAgICAgIGZ3ZEV4cHIgPDwgKGEgfCBiIHwgYykKICAgIENvbnZlcnRpbmcgdG8gdXNlIHRoZSAnPDw9JyBvcGVyYXRvciBpbnN0ZWFkIHdpbGwgYXZvaWQgdGhpcyBwcm9ibGVtLgoKICAgIFNlZSBMe1BhcnNlUmVzdWx0cy5wcHJpbnR9IGZvciBhbiBleGFtcGxlIG9mIGEgcmVjdXJzaXZlIHBhcnNlciBjcmVhdGVkIHVzaW5nCiAgICBDe0ZvcndhcmR9LgogICAgTmMCAAAAAAAAAAAAAAACAAAABAAAAAMA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c3QsIGJ1dCBhbHNvIGFzIGEgZGljdGlvbmFyeS4KICAgIEVhY2ggZWxlbWVudCBjYW4gYWxzbyBiZSByZWZlcmVuY2VkIHVzaW5nIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgZXhwcmVzc2lvbiBhcyBpdHMga2V5LgogICAgVXNlZnVsIGZvciB0YWJ1bGFyIHJlcG9ydCBzY3JhcGluZyB3aGVuIHRoZSBmaXJzdCBjb2x1bW4gY2FuIGJlIHVzZWQgYXMgYSBpdGVtIGtleS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICAKICAgICAgICAjIHByaW50IGF0dHJpYnV0ZXMgYXMgcGxhaW4gZ3JvdXBzCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgaW5zdGVhZCBvZiBPbmVPck1vcmUoZXhwciksIHBhcnNlIHVzaW5nIERpY3QoT25lT3JNb3JlKEdyb3VwKGV4cHIpKSkgLSBEaWN0IHdpbGwgYXV0by1hc3NpZ24gbmFtZXMKICAgICAgICByZXN1bHQgPSBEaWN0KE9uZU9yTW9yZShHcm91cChhdHRyX2V4cHIpKSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmlu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VGhlIGtleSBwYXR0ZXJuIGNhbiBpbmNsdWRlIGRlbGltaXRpbmcgbWFya2VycyBvciBwdW5jdHVhdGlvbiwKICAgIGFzIGxvbmcgYXMgdGhleSBhcmUgc3VwcHJlc3NlZCwgdGhlcmVieSBsZWF2aW5nIHRoZSBzaWduaWZpY2FudCBrZXkgdGV4dC4gIFRoZSB2YWx1ZQogICAgcGF0dGVybiBjYW4gaW5jbHVkZSBuYW1lZCByZXN1bHRzLCBzbyB0aGF0IHRoZSBDe0RpY3R9IHJlc3VsdHMgY2FuIGluY2x1ZGUgbmFtZWQgdG9rZW4KICAgIGZpZWxkcy4KCiAgICBFeGFtcGxlOjoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKICAgICAgICAKICAgICAgICBhdHRyX2xhYmVsID0gbGFiZWwKICAgICAgICBhdHRyX3ZhbHVlID0gU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pCgogICAgICAgICMgc2ltaWxhciB0byBEaWN0LCBidXQgc2ltcGxlciBjYWxsIGZvcm1hdAogICAgICAgIHJlc3VsdCA9IGRpY3RPZihhdHRyX2xhYmVsLCBhdHRyX3ZhbHVlKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5zaGFwZSkgICMgb2JqZWN0IGF0dHJpYnV0ZSBhY2Nlc3Mgd29ya3MgdG9vCiAgICAg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ZyBhbmQgY2xvc2luZyB0YWcgZXhwcmVzc2lvbnMgZm9yIEhUTUwsIGdpdmVuIGEgdGFnIG5hbWUuIE1hdGNoZXMKICAgIHRhZ3MgaW4gZWl0aGVyIHVwcGVyIG9yIGxvd2VyIGNhc2UsIGF0dHJpYnV0ZXMgd2l0aCBuYW1lc3BhY2VzIGFuZCB3aXRoIHF1b3RlZCBvciB1bnF1b3RlZCB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CiAgICAgICAgdGV4dCA9ICc8dGQ+TW9yZSBpbmZvIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vcHlwYXJzaW5nLndpa2lzcGFjZXMuY29tIj5weXBhcnNpbmc8L2E+IHdpa2kgcGFnZTwvdGQ+JwogICAgICAgICMgbWFrZUhUTUxUYWdzIHJldHVybnMgcHlwYXJzaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIGFzIGEgMi10dXBsZQogICAgICAgIGEsYV9lbmQgPSBtYWtlSFRNTFRhZ3MoIkEiKQogICAgICAgIGxpbmtfZXhwciA9IGEgKyBTa2lwVG8oYV9lbmQpKCJsaW5rX3RleHQiKSArIGFfZW5kCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmsgaW4gbGlua19leHByLnNlYXJjaFN0cmluZyh0ZXh0KToKICAgICAgICAgICAgIyBhdHRyaWJ1dGVzIGluIHRoZSA8QT4gdGFnIChsaWtlICJocmVmIiBzaG93biBoZXJlKSBhcmUgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKICAgIHByaW50czo6CiAgICAgICAgcHlwYXJzaW5nIC0+IGh0dHA6Ly9weXBhcnNpbmcud2lraXNwYWNlcy5jb20KICAgIEapAXIEBAAAqQFy/AMAAHJ5AAAAcnkAAAByegAAAHJNAAAAKBMAAHMCAAAAChFyTQAAAGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAAByBQQAACkCeroKICAgIEhlbHBlciB0byBjb25zdHJ1Y3Qgb3BlbmluZyBhbmQgY2xvc2luZyB0YWcgZXhwcmVzc2lvbnMgZm9yIFhNTCwgZ2l2ZW4gYSB0YWcgbmFtZS4gTWF0Y2hlcwogICAgdGFncyBvbmx5IGluIHRoZSBnaXZlbiB1cHBlci9sb3dlciBjYXNlLgoKICAgIEV4YW1wbGU6IHNpbWlsYXIgdG8gTHttYWtlSFRNTFRhZ3N9CiAgICBUcgYEAAByBwQAAHJ5AAAAcnkAAAByegAAAHJOAAAAOxMAAHMCAAAACgdyTgAAAGMAAAAAAAAAAAAAAAADAAAAAwAAAA8AAABzOAAAAHwAcgl8AGQBZAGFAhkAiQBuBHwBoAChAIkAZAJkA4QAiABEAIMBiQCHAGYBZARkBYQIfQJ8AlMAKQZhPAgAAAogICAgSGVscGVyIHRvIGNyZWF0ZSBhIHZhbGlkYXRpbmcgcGFyc2UgYWN0aW9uIHRvIGJlIHVzZWQgd2l0aCBzdGFydCB0YWdzIGNyZWF0ZWQKICAgIHdpdGggQ3tMe21ha2VYTUxUYWdzfX0gb3IgQ3tMe21ha2VIVE1MVGFnc319LiBVc2UgQ3t3aXRoQXR0cmlidXRlfSB0byBxdWFsaWZ5IGEgc3RhcnRpbmcgdGFnCiAgICB3aXRoIGEgcmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlLCB0byBhdm9pZCBmYWxzZSBtYXRjaGVzIG9uIGNvbW1vbiB0YWdzIHN1Y2ggYXMKICAgIEN7PFREPn0gb3IgQ3s8RElWPn0uCgogICAgQ2FsbCBDe3dpdGhBdHRyaWJ1dGV9IHdpdGggYSBzZXJpZXMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuIFNwZWNpZnkgdGhlIGxpc3QKICAgIG9mIGZpbHRlciBhdHRyaWJ1dGVzIG5hbWVzIGFuZCB2YWx1ZXMgYXM6CiAgICAgLSBrZXl3b3JkIGFyZ3VtZW50cywgYXMgaW4gQ3soYWxpZ249InJpZ2h0Iil9LCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIEN7Kip9IG9wZXJhdG9yLCB3aGVuIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIGFsc28gYSBQeXRob24KICAgICAgICAgIHJlc2VydmVkIHdvcmQsIGFzIGluIEN7Kip7ImNsYXNzIjoiQ3VzdG9tZXIiLCAiYWxpZ24iOiJyaWdodCJ9fQogICAgIC0gYSBsaXN0IG9mIG5hbWUtdmFsdWUgdHVwbGVzLCBhcyBpbiAoICgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwicmlnaHQiKSApCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZCBmb3JtLiAgQXR0cmlidXRlCiAgICBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgogICAgICAgCiAgICBJZiBqdXN0IHRlc3RpbmcgZm9yIEN7Y2xhc3N9ICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UgQ3tMe3dpdGhDbGFzc319LgoKICAgIFRvIHZlcmlmeSB0aGF0IHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBidXQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdmFsdWUsIHBhc3MKICAgIEN7d2l0aEF0dHJpYnV0ZS5BTllfVkFMVUV9IGFzIHRoZSB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKCiAgICAgICAgIyBvbmx5IG1hdGNoIGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAiZ3JpZCIKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUo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CHQMgwJzvnQMfAiDAX0IdAd8CGoNfA8XAIMBdAh8CHwPFwCDARcAfRBuUHwJZAdrAnL2fAhkAnUBcud0B3wFfAgXAHwPFwCDAXQIfAV0CXwIfA8XAIMBFwCDARcAfRBuNXQHfAV8DxcAgwF0CHwFdAl8D4MBFwCDARcAfRBuJnwJZARrApABchR0B3wFfA0XAHwPFwB8DhcAfA8XAIMBdAh8BXwNFwB8DxcAfA4XAHwPFwCDARcAfRBuCHQDZAqDAYIBdANkC4MBggF8C5ABcjJ0C3wLdA50D2YCgwKQAXItfBBqEHwLjgABAG4FfBCgEHwLoQEBAHwPfBCgBHwMoQF8BUIASwB9D3wPfQVxD3wEfAVLAH0EfARTACkMYUQKAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGNvbnN0cnVjdGluZyBncmFtbWFycyBvZiBleHByZXNzaW9ucyBtYWRlIHVwIG9mCiAgICBvcGVyYXRvcnMgd29ya2luZyBpbiBhIHByZWNlZGVuY2UgaGllcmFyY2h5LiAgT3BlcmF0b3JzIG1heSBiZSB1bmFyeSBvcgogICAgYmluYXJ5LCBsZWZ0LSBvciByaWdodC1hc3NvY2lhdGl2ZS4gIFBhcnNlIGFjdGlvbnMgY2FuIGFsc28gYmUgYXR0YWNoZWQKICAgIHRvIG9wZXJhdG9yIGV4cHJlc3Npb25zLiBUaGUgZ2VuZXJhdGVkIHBhcnNlciB3aWxsIGFsc28gcmVjb2duaXplIHRoZSB1c2UgCiAgICBvZiBwYXJlbnRoZXNlcyB0byBvdmVycmlkZSBvcGVyYXRvciBwcmVjZWRlbmNlcyAoc2VlIGV4YW1wbGUgYmVsb3cpLgogICAgCiAgICBOb3RlOiBpZiB5b3UgZGVmaW5lIGEgZGVlcCBvcGVyYXRvciBsaXN0LCB5b3UgbWF5IHNlZSBwZXJmb3JtYW5jZSBpc3N1ZXMKICAgIHdoZW4gdXNpbmcgaW5maXhOb3RhdGlvbi4gU2VlIEx7UGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0fSBmb3IgYQogICAgbWVjaGFuaXNtIHRvIHBvdGVudGlhbGx5IGltcHJvdmUgeW91ciBwYXJzZXIgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGJhc2VFeHByIC0gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG1vc3QgYmFzaWMgZWxlbWVudCBmb3IgdGhlIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsIGluIHRoZQogICAgICBleHByZXNzaW9uIGdyYW1tYXI7IGVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm0KICAgICAgKG9wRXhwciwgbnVtVGVybXMsIHJpZ2h0TGVmdEFzc29jLCBwYXJzZUFjdGlvbiksIHdoZXJlOgogICAgICAgLSBvcEV4cHIgaXMgdGhlIHB5cGFyc2luZyBleHByZXNzaW9uIGZvciB0aGUgb3BlcmF0b3I7CiAgICAgICAgICBtYXkgYWxzbyBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOwogICAgICAgICAgaWYgbnVtVGVybXMgaXMgMywgb3BFeHByIGlzIGEgdHVwbGUgb2YgdHdvIGV4cHJlc3Npb25zLCBmb3IgdGhlCiAgICAgICAgICB0d28gb3BlcmF0b3JzIHNlcGFyYXRpbmcgdGhlIDMgdGVybXMKICAgICAgIC0gbnVtVGVybXMgaXMgdGhlIG51bWJlciBvZiB0ZXJtcyBmb3IgdGhpcyBvcGVyYXRvciAobXVzdAogICAgICAgICAgYmUgMSwgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcwogICAgICAgICAgcmlnaHQgb3IgbGVmdCBhc3NvY2lhdGl2ZSwgdXNpbmcgdGhlIHB5cGFyc2luZy1kZWZpbmVkCiAgICAgICAgICBjb25zdGFudHMgQ3tvcEFzc29jLlJJR0hUfSBhbmQgQ3tvcEFzc29jLkxFRlR9LgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhpcyBvcGVyYXRvciBleHByZXNzaW9uICh0aGUKICAgICAgICAgIHBhcnNlIGFjdGlvbiB0dXBsZSBtZW1iZXIgbWF5IGJlIG9taXR0ZWQpOyBpZiB0aGUgcGFyc2UgYWN0aW9uCiAgICAgICAgICBpcyBwYXNzZWQgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvCiAgICAgICAgICBjYWxsaW5nIEN7c2V0UGFyc2VBY3Rpb24oKmZuKX0gKEx7UGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbn0pCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcoJyl9KQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzIChkZWZhdWx0PUN7U3VwcHJlc3MoJyknKX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBzaW1wbGUgZXhhbXBsZSBvZiBmb3VyLWZ1bmN0aW9uIGFyaXRobWV0aWMgd2l0aCBpbnRzIGFuZCB2YXJpYWJsZSBuYW1lcwogICAgICAgIGludGVnZXIgPSBweXBhcnNpbmdfY29tbW9uLnNpZ25lZF9pbnRlZ2VyCiAgICAgICAgdmFybmFtZSA9IHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllciAKICAgICAgICAKICAgICAgICBhcml0aF9leHByID0gaW5maXhOb3RhdGlvbihpbnRlZ2VyIHwgdmFybmFtZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAoJy0nLCAxLCBvcEFzc29jLlJJR0hUKSwKICAgICAgICAgICAgKG9uZU9mKCcqIC8nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgKG9uZU9mKCcrIC0nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgXSkKICAgICAgICAKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAoNSszKSo2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KTsgY2FuIGFsc28gYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbgogICAgIC0gY29udGVudCAtIGV4cHJlc3Npb24gZm9yIGl0ZW1zIHdpdGhpbiB0aGUgbmVzdGVkIGxpc3RzIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgLSBpZ25vcmVFeHByIC0gZXhwcmVzc2lvbiBmb3IgaWdub3Jpbmcgb3BlbmluZyBhbmQgY2xvc2luZyBkZWxpbWl0ZXJzIChkZWZhdWx0PUN7cXVvdGVkU3RyaW5nfSkKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZSBuZXN0ZWQKICAgIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50IGJldHdlZW4gZGVsaW1pdGVycwogICAgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIEN7aWdub3JlRXhwcn0gYXJndW1lbnQgdG8gZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgbWF5IGNvbnRhaW4KICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIG9wZW5pbmcKICAgIG9yIGNsb3NpbmcgY2hhcmFjdGVycyBmb3IgbmVzdGluZywgc3VjaCBhcyBxdW90ZWRTdHJpbmcgb3IgYSBjb21tZW50CiAgICBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbiBDe0x7T3J9fSBvciBDe0x7TWF0Y2hGaXJzdH19LgogICAgVGhlIGRlZmF1bHQgaXMgTHtxdW90ZWRTdHJpbmd9LCBidXQgaWYgbm8gZXhwcmVzc2lvbnMgYXJlIHRvIGJlIGlnbm9yZWQsCiAgICB0aGVuIHBhc3MgQ3tOb25lfSBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3R5cGUgPSBvbmVPZigidm9pZCBpbnQgc2hvcnQgbG9uZyBjaGFyIGZsb2F0IGRvdWJsZSIpCiAgICAgICAgZGVjbF9kYXRhX3R5cGUgPSBDb21iaW5lKGRhdGFfdHlwZSArIE9wdGlvbmFsKFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsUlBBUiA9IG1hcChTdXBwcmVzcywgIigpIikKCiAgICAgICAgY29kZV9ib2R5ID0gbmVzdGVkRXhwcigneycsICd9JywgaWdub3JlRXhwcj0ocXVvdGVkU3RyaW5nIHwgY1N0eWxlQ29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKSAKICAgICAgICAgICAgICAgICAgICAgICsgaWRlbnQoIm5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgKyBMUEFSICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChhcmcpLCBbXSkoImFyZ3MiKSArIFJQQVIgCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCiAgICAgICAgCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgeyAKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7IAogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcmQoaGNoYXIpLW9yZCgnMCcpKTsgCiAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEwK29yZChoY2hhciktb3JkKCdBJykpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfQogICAgICAgICcnJwogICAgICAgIGZvciBmdW5jIGluIGNfZnVuY3Rpb24uc2VhcmNoU3RyaW5nKHNvdXJjZV9jb2RlKToKICAgICAgICAgICAgcHJpbnQoIiUobmFtZSlzICglKHR5cGUpcykgYXJnczogJShhcmdzKXMiICUgZnVuYykKCiAgICBwcmludHM6OgogICAgICAgIGlzX29kZCAoaW50KSBhcmdzOiBbWydpbnQnLCAneCddXQogICAgICAgIGRlY190b19oZXggKGludCkgYXJnczogW1snY2hhcicsICdoY2hhciddXQogICAgei5vcGVuaW5nIGFuZCBjbG9zaW5nIHN0cmluZ3MgY2Fubm90IGJlIHRoZSBzYW1lTnKOAAAActoDAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAA8wwAAAB8AGQBGQCgAKEAUwBy3gAAAKkBcsEAAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAZxQAAHKtAwAAehxuZXN0ZWRFeHByLjxsb2NhbHM+LjxsYW1iZGE+YwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHIlBAAAct4AAAByJgQAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAABqFAAAcq0DAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAciUEAABy3gAAAHImBAAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAAHAUAAByrQMAAGMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAAByJQQAAHLeAAAAciYEAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAdBQAAHKtAwAAek9vcGVuaW5nIGFuZCBjbG9zaW5nIGFyZ3VtZW50cyBtdXN0IGJlIHN0cmluZ3MgaWYgbm8gY29udGVudCBleHByZXNzaW9uIGlzIGdpdmVuehZuZXN0ZWQgJXMlcyBleHByZXNzaW9uKRJyaAIAAHJ9AAAAcvQAAAByBQEAAHIMAAAAchsAAAByCwAAAHImAAAAcrkBAAByhAAAAHJFAAAAcvUAAAByFwAAAHIRAAAAchMAAAByLQAAAHI0AAAActcBAAApBdoGb3BlbmVy2gZjbG9zZXLaB2NvbnRlbnRyhAMAAHKHAAAAcnkAAAByeQAAAHJ6AAAAclIAAAAlFAAAc0gAAAAIOggBCAEUARgBCAEIARQBBv8KAgT+FgQKAQb/CAMIAQgBAv8IAQL/DAIG/goDBP0WBQwBBv8KAgT+CAQGAQgBKgEkAhIBBAFyUgAAAGMDAAAAAAAAAAAAAAALAAAABgAAAAMAAABz5AAAAIcAZgFkAWQChAh9A4cAZgFkA2QEhAh9BIcAZgFkBWQGhAh9BXQAdAGDAKACZAehAaADoQCDAX0GdASDAHQEgwCgBXwEoQEXAKAGZAihAX0HdASDAKAFfAOhAaAGZAmhAX0IdASDAKAFfAWhAaAGZAqhAX0JfAJyU3QHdAh8BoMBfAcXAHQAfAh0B3wAgwEXAHQIfAaDARcAgwEXAHwJFwCDAX0KbhJ0B3QIfAaDAXQAfAh0B3wAgwEXAHQIfAaDARcAgwEXAIMBfQp8AKAJdAp0AYMAFwChAQEAfAqgBmQLoQFTACkMYQoJAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIHNwYWNlLWRlbGltaXRlZCBpbmRlbnRhdGlvbiBibG9ja3MsIHN1Y2ggYXMKICAgIHRob3NlIHVzZWQgdG8gZGVmaW5lIGJsb2NrIHN0YXRlbWVudHMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBibG9ja1N0YXRlbWVudEV4cHIgLSBleHByZXNzaW9uIGRlZmluaW5nIHN5bnRheCBvZiBzdGF0ZW1lbnQgdGhhdAogICAgICAgICAgICBpcyByZXBlYXRlZCB3aXRoaW4gdGhlIGluZGVudGVkIGJsb2NrCiAgICAgLSBpbmRlbnRTdGFjayAtIGxpc3QgY3JlYXRlZCBieSBjYWxsZXIgdG8gbWFuYWdlIGluZGVudGF0aW9uIHN0YWNrCiAgICAgICAgICAgIChtdWx0aXBsZSBzdGF0ZW1lbnRXaXRoSW5kZW50ZWRCbG9jayBleHByZXNzaW9ucyB3aXRoaW4gYSBzaW5nbGUgZ3JhbW1hcgogICAgICAgICAgICBzaG91bGQgc2hhcmUgYSBjb21tb24gaW5kZW50U3RhY2spCiAgICAgLSBpbmRlbnQgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBibG9jayBtdXN0IGJlIGluZGVudGVkIGJleW9uZCB0aGUKICAgICAgICAgICAgdGhlIGN1cnJlbnQgbGV2ZWw7IHNldCB0byBGYWxzZSBmb3IgYmxvY2sgb2YgbGVmdC1tb3N0IHN0YXRlbWVudHMKICAgICAgICAgICAgKGRlZmF1bHQ9Q3tUcnVlfSkKCiAgICBBIHZhbGlkIGJsb2NrIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgQ3tibG9ja1N0YXRlbWVudH0uCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YSA9ICcnJwogICAgICAgIGRlZiBBKHopOgogICAgICAgICAgQTEKICAgICAgICAgIEIgPSAxMDAKICAgICAgICAgIEcgPSBBMgogICAgICAgICAgQTIKICAgICAgICAgIEEzCiAgICAgICAgQgogICAgICAgIGRlZiBCQihhLGIsYyk6CiAgICAgICAgICBCQjEKICAgICAgICAgIGRlZiBCQkEoKToKICAgICAgICAgICAgYmJhMQogICAgICAgICAgICBiYmEyCiAgICAgICAgICAgIGJiYTMKICAgICAgICBDCiAgICAgICAgRAogICAgICAgIGRlZiBzcGFtKHgseSk6CiAgICAgICAgICAgICBkZWYgZWdncyh6KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgJycnCgoKICAgICAgICBpbmRlbnRTdGFjayA9IFsxXQogICAgICAgIHN0bXQgPSBGb3J3YXJkKCkKCiAgICAgICAgaWRlbnRpZmllciA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgZnVuY0RlY2wgPSAoImRlZiIgKyBpZGVudGlmaWVyICsgR3JvdXAoICIoIiArIE9wdGlvbmFsKCBkZWxpbWl0ZWRMaXN0KGlkZW50aWZpZXIpICkgKyAiKSIgKSArICI6IikKICAgICAgICBmdW5jX2JvZHkgPSBpbmRlbnRlZEJsb2NrKHN0bXQsIGluZGVudFN0YWNrKQogICAgICAgIGZ1bmNEZWYgPSBHcm91cCggZnVuY0RlY2wgKyBmdW5jX2JvZHkgKQoKICAgICAgICBydmFsdWUgPSBGb3J3YXJkKCkKICAgICAgICBmdW5jQ2FsbCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHJ2YWx1ZSkpICsgIikiKQogICAgICAgIHJ2YWx1ZSA8PCAoZnVuY0NhbGwgfCBpZGVudGlmaWVyIHwgV29yZChudW1zKSkKICAgICAgICBhc3NpZ25tZW50ID0gR3JvdXAoaWRlbnRpZmllciArICI9IiArIHJ2YWx1ZSkKICAgICAgICBzdG10IDw8ICggZnVuY0RlZiB8IGFzc2lnbm1lbnQgfCBpZGVudGlmaWVyICkKCiAgICAgICAgbW9kdWxlX2JvZHkgPSBPbmVPck1vcmUoc3RtdCkKCiAgICAgICAgcGFyc2VUcmVlID0gbW9kdWxlX2JvZHkucGFyc2VTdHJpbmcoZGF0YSkKICAgICAgICBwYXJzZVRyZWUucHByaW50KCkKICAgIHByaW50czo6CiAgICAgICAgW1snZGVmJywKICAgICAgICAgICdBJywKICAgICAgICAgIFsnKCcsICd6JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0ExJ10sIFtbJ0InLCAnPScsICcxMDAnXV0sIFtbJ0cnLCAnPScsICdBMiddXSwgWydBMiddLCBbJ0EzJ11dXSwKICAgICAgICAgJ0InLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnQkInLAogICAgICAgICAgWycoJywgJ2EnLCAnYicsICdjJywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0JCMSddLCBbWydkZWYnLCAnQkJBJywgWycoJywgJyknXSwgJzonLCBbWydiYmExJ10sIFsnYmJhMiddLCBbJ2JiYTMnXV1dXV1dLAogICAgICAgICAnQycsCiAgICAgICAgICdEJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ3NwYW0nLAogICAgICAgICAgWycoJywgJ3gnLCAneScsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbW1snZGVmJywgJ2VnZ3MnLCBbJygnLCAn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ZGRyZXNzPn0pCiAgICAgLSBJU084NjAxIEx7ZGF0ZXM8aXNvODYwMV9kYXRlPn0gYW5kIEx7ZGF0ZXRpbWU8aXNvODYwMV9kYXRldGltZT59CiAgICAgLSBMe1VVSUQ8dXVpZD59CiAgICAgLSBMe2NvbW1hLXNlcGFyYXRlZCBsaXN0PGNvbW1hX3NlcGFyYXRlZF9saXN0Pn0KICAgIFBhcnNlIGFjdGlvbnM6CiAgICAgLSBDe0x7Y29udmVydFRvSW50ZWdlcn19CiAgICAgLSBDe0x7Y29udmVydFRvRmxvYXR9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV0aW1lfX0KICAgICAtIEN7THtzdHJpcEhUTUxUYWdzfX0KICAgICAtIEN7THt1cGNhc2VUb2tlbnN9fQogICAgIC0gQ3tMe2Rvd25jYXNlVG9rZW5zfX0KCiAgICBFeGFtcGxlOjoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uaGV4X2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIEZGCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mcmFjdGlvbi5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm1peGVkX2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgICAgIDEKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgMS0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBpbXBvcnQgdXVpZAogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcCh1dWlkLlVVSUQpKQogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB1dWlkCiAgICAgICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgICAgICAnJycpCiAgICBwcmludHM6OgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgIDEwMAogICAgICAgIFsyNTZdCgogICAgICAgIEZGCiAgICAgICAgWzI1NV0KCiAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgIDEKICAgICAgICBbMV0KCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgMS0zLzQKICAgICAgICBbMS43NV0KCiAgICAgICAgIyB1dWlkCiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgW1VVSUQoJzEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OCcpXQogICAg2gdpbnRlZ2VyegtoZXggaW50ZWdlcnLbAwAAeghbKy1dP1xkK3oOc2lnbmVkIGludGVnZXJy9QMAANoIZnJhY3Rpb25jAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcxAAAAB8AGQBGQB8AGQCGQAbAFMAKQNOcgEAAABydAAAAHJ5AAAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAALQVAABywQMAAHoZcHlwYXJzaW5nX2NvbW1vbi48bGFtYmRhPnIxAwAAeiJmcmFjdGlvbiBvciBtaXhlZCBpbnRlZ2VyLWZyYWN0aW9ueg1bKy1dP1xkK1wuXGQqegtyZWFsIG51bWJlcnorWystXT9cZCsoW2VFXVsrLV0/XGQrfFwuXGQqKFtlRV1bKy1d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