Mw0NCgxae2PyKwQA4wAAAAAAAAAAAAAAAKIAAABAAAAAcwYPAABkAFoAZAFaAWQCWgJkA1oDZARkBWwEWgRkBGQGbAVtBloHAQBkBGQFbAhaCGQEZAVsCVoJZARkBWwKWgpkBGQFbAtaC2QEZAVsDFoMZARkBWwNWg1kBGQFbA5aDmQEZAVsD1oPZARkBWwQWhBkBGQHbBFtEVoRAQBkBGQIbBJtE1oTAQBkBGQFbBRaFGQEZAlsFW0WWhYBAGQEZApsF20YWhgBAHkQZARkC2wUbRlaGQEAVwBuIAQAZRprCnLUAQABAAEAZARkDGwUbRtaGQEAWQBuAlgAeRBkBGQNbBxtHVodAQBXAG4iBABlGmsKkAFyCAEAAQABAGQEZA1sHm0dWh0BAFkAbgJYAHkgZARkDmwfbSBaIAEAZARkD2wfbSFaIW0iWiIBAFcAbjIEAGUaawqQAXJcAQABAAEAZARkDmwNbSBaIAEAZARkD2wNbSFaIW0iWiIBAFkAbgJYAHkQZARkEGwNbSNaJAEAVwBuQgQAZRprCpABcrABAAEAAQB5EGQEZBBsJW0jWiQBAFcAbhoEAGUaawqQAXKqAQABAAEAZAVaJFkAbgJYAFkAbgJYAHkQZARkEWwQbSZaJgEAVwBuJAQAZRprCpABcuYBAAEAAQBHAGQSZBOEAGQTgwJaJlkAbgJYAGUmgwBaJ2QUZSdfAGQVZSdfKGUmgwBaKWQWZSlfAGQXZSlfKmQXZSlfK2QXZSlfLGQXZSlfLWQXZSlfLmQYZBmEAGUvZSmDAUQAgwFlKV8wZBpkG4QAWjFlMWUpXzJkHGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmQvZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkOmQ7ZDxkPWQ+ZD9kQGRBZEJkQ2REZEVkRmRHZEhkSWRKZEtkTGRNZE5kT2RQZFFkUmRTZFRkVWRWZFdkWGRZZFpkW2RcZF1kXmRfZGBkYWRiZGNkZGRlZGZkZ2RoZGlkamRrZGxkbWRuZG9kcGRxZHJkc2R0ZHVkdmR3ZHhkeWR6ZHtkfGR9ZH5kf2SAZIFkgmSDZIRkhWSGZIdkiGSJZIpki2SMZI1kjmSPZ3RaM2U0ZQlqNYMBZAVkkIUCGQBaNmU2ZAQZAGSQawJaN2U3kANyiGUJajhaOWU6WjtlPFo9ZTpaPmU6Wj9lQGVBZUJlQ2VEZTRlRWVGZUdlSGVJZwtaSm5iZQlqS1o5ZUxaTWSRZJKEAFo/ZwBaSmQEZAVsTlpOeEJkk2pPgwBEAF02WlB5FGVKalFlUmVOZVCDAoMBAQBXAG4aBABlU2sKkANy4gEAAQABAJADd7BZAG4CWACQA3GwVwBlVGSUZJWEAGVNZJaDAUQAgwGDAVpVZJdkmIQAWlZlBGpXZQRqWBcAWllkmVpaZVpkmhcAWltlWWVaFwBaXGU8ZJuDAVpdZJxqXmSdZJWEAGUEal9EAIMBgwFaYJABZGFknmSOhAFaYUcAZJ9kOYQAZDllYoMDWmNHAGSgZDuEAGQ7ZWODA1pkRwBkoWQ9hABkPWVjgwNaZUcAZKJkP4QAZD9lZYMDWmZHAGSjZEKEAGRCZWKDA1pnRwBkpGSlhABkpWVogwNaaUcAZKZkPoQAZD5laIMDWmplIWprZWqDAQEAZKdkVoQAWmxkqGRnhABabWSpZGSEAFpuZKpkq4QAWm9krGSthABacGSuZK+EAFpxZLBkboQAWnKQAWRiZLJks4QBWnNHAGS0ZECEAGRAZWiDA1p0RwBktWS2hABktmV0gwNadUcAZLdkSIQAZEhldIMDWnZHAGS4ZCiEAGQoZXaDA1p3RwBkuWQzhABkM2V2gwNaeEcAZLpkMIQAZDBldoMDWnlHAGS7ZLyEAGS8ZXmDA1p6ZXlae2V5ZXRffEcAZL1kLYQAZC1ldoMDWn1HAGS+ZCOEAGQjZXmDA1p+RwBkv2QihABkImV9gwNaf0cAZMBkiYQAZIlldoMDWoBHAGTBZEuEAGRLZXaDA1qBRwBkwmTDhABkw2WBgwNagkcAZMRkT4QAZE9lgoMDWoNHAGTFZEOEAGRDZXaDA1qERwBkxmRBhABkQWV2gwNahUcAZMdkJIQAZCRldoMDWoZHAGTIZEqEAGRKZXaDA1qHRwBkyWTKhABkymV2gwNaiEcAZMtkK4QAZCtliIMDWolHAGTMZC+EAGQvZYiDA1qKRwBkzWQuhABkLmWIgwNai0cAZM5kRoQAZEZliIMDWoxHAGTPZEWEAGRFZYiDA1qNRwBk0GRNhABkTWWIgwNajkcAZNFkTIQAZExliIMDWo9HAGTSZDyEAGQ8ZXSDA1qQRwBk02QhhABkIWWQgwNakUcAZNRkOIQAZDhlkIMDWpJHAGTVZDKEAGQyZZCDA1qTRwBk1mQnhABkJ2WQgwNalEcAZNdkOoQAZDpldIMDWpVHAGTYZCmEAGQpZZWDA1qWRwBk2WQxhABkMWWVgwNal0cAZNpkNIQAZDRllYMDWphHAGTbZNyEAGTcZZWDA1qZRwBk3WQ1hABkNWWZgwNamkcAZN5kToQAZE5lmYMDWptHAGTfZOCEAGTgZWiDA1qcRwBk4WQ3hABkN2WVgwNanUcAZOJkRIQAZERllYMDWp5HAGTjZCqEAGQqZZWDA1qfRwBk5GRJhABkSWWVgwNaoEcAZOVkJYQAZCVloIMDWqFHAGTmZCyEAGQsZaCDA1qiRwBk52QmhABkJmWggwNao0cAZOhkR4QAZEdloIMDWqRHAGTpZDaEAGQ2ZWiDA1qlZOpkf4QAWqaQAWRjZOxkXYQBWqeQAWRkZO1kWYQBWqhk7mTvhABaqWTwZGyEAFqqZPFka4QAWqtk8mTzhABarJABZGVk9GRwhAFarWT1ZF6EAFqukAFkZmT2ZISEAVqvZPdkhYQAWrBk+GSHhABasWV3gwBqsmRggwFas2WKgwBqsmRmgwFatGWLgwBqsmRlgwFatWWMgwBqsmR+gwFatmWNgwBqsmR9gwFat2WBZV1k+WSxZPqNA2q4ZPtk/IQAgwFauWWEZP2DAWq4ZP5k/IQAgwFaumWEZP+DAWq4kAFkAGT8hACDAVq7ZbllukIAZbtCAGWGkAFkAWSWZPqNAkIAWrxlomW8ZaSQAWQCgwEXAGW8FwCDAVq9ZXmQAWQDgwFlnZABZASDAWq+kAFkBYMBFwBlomWaZb1lvEIAgwGDAWq+kAFkBoMBFwCQAWQHFwBav5ABZAhkfIQAWsCQAWQJZGqEAFrBkAFkCmR5hABawpABZAtkd4QAWsOQAWQMZIqEAFrEZcSQAWQNZPyEAIMBWsVlxJABZA5k/IQAgwFaxmWkkAFkD4MBZaSQAWQQgwFmApABZBGQAWQShAFax5ABZBNkaIQAWsiQAWQUZGmEAFrJkAFkFWSChABaymVogwBlyl/LkAFkZ5ABZBZkiIQBWsxlJoMAWs1laIMAZc1fzmVogwBlzV/PZaSQAWQXgwFlpJABZBiDAWYCkAFkGWSGhAFa0GXQWtFloWWEkAFkGoMBkAFkGxcAgwFqspABZByDAVrSZaFlhJABZB2DAZABZB4XAIMBarKQAWQfgwFa02WhZYSQAWQagwGQAWQbFwBlhJABZB2DAZABZB4XAEIAgwFqspABZCCDAVrUZaFle5ABZCGDAWXUagiDABcAgwFqspABZCKDAVrVkAFkF5ABZBhkBWXUagiDAGYEkAFkI2RthAFa1pABZGiQAWQkZIOEAVrXZcCQAWQlgwFa2GXAkAFkJoMBWtllyGWBZVllXJABZCcXAIMCarKQAWQogwGDAVwCWtpa22XcZd2QAWQpak+DAJABZCqDAoMBWt5lhJABZCuQAWQsal5l3mrfgwCDARcAkAFkLRcAgwFqspABZC6DAVrgkAFkL2R4hABa4WWhZYSQAWQwgwGQAWQxFwCDAWqykAFkMoMBWuJlhJABZDODAWqykAFkNIMBWuNlhJABZDWDAWrkgwBqspABZDaDAVrlZYSQAWQ3gwFqspABZDiDAVrmZaFlhJABZDCDAZABZDEXAGXmQgCDAWqykAFkOYMBWudl51roZYSQAWQ6gwFqspABZDuDAVrpZaFlmmWBZWBk65ABZDyNAmWdZYGQAWQ9gwFleWTrgwEPABcAZYuDAA8AFwCDARcAgwGDAWrqgwBqspABZD6DAVrrZadlnWXUagiDAGXrQgBknJABZD+NAoMBarJkV4MBWuxHAJABZEBki4QAZIuDAlrtRwCQAWRBkAFkQoQAkAFkQmVogwNa7kcAkAFkQ2SNhABkjWVogwNa70cAkAFkRGSMhABkjGXvgwNa8GXwavFq8mrzZfBq8Wr0avMXAGXwavFq9WrzFwBl8GrxX/NlN5ANcphl9mXwkAFkRWXwaveDAwEAZfZl8JABZEZl8Gr4gwMBAGX2ZfCQAWRHZfBq+YMDAQBl9mXwkAFkSGXwavqDAwEAZfZl8JABZEll8Gr7gwMBAGX2ZfCQAWRKZfBq8YMDAQBl9mXwavGQAWRLZfBq8WrygwMBAGX2ZfBq8ZABZExl8GrxavWDAwEAZfZl8GrxkAFkTWXwavFq9IMDAQBl9mXwkAFkTmXwavyDAwEAZfZl8JABZE9l8Gr9gwMBAGX2ZfCQAWRQZfBq/oMDAQBHAJABZFGQAWRShACQAWRSgwJa/5ABZQCQAWRTawKQD3ICZX6QAWRUgwGQAVoBZX6QAWRVgwGQAVoCZYFlWWVckAFkVhcAgwKQAVoDZaeQAWUDkAFkV2QVkAFkWI0DarhlxYMBkAFaBGWiZaeQAWUEgwGDAWqykAFkWYMBkAFaBZABZFqQAWUFQgCQAVoGZaeQAWUDkAFkV2QVkAFkWI0DarhlxYMBkAFaB2WiZaeQAWUHgwGDAWqykAFkW4MBkAFaCJABZQGQAWRcgwGQAWUGkAFkWYMBFwCQAWUCFwCQAWUIkAFkW4MBFwCQAVoJkAFlCZABagqQAWRdgwEBAGXtkAFqC5ABagqQAWRegwEBAGXtkAFqDJABagqQAWRegwEBAGXtkAFqDZABagqQAWRfgwEBAGQEZAWQAWwOkAFaDmXtkAFqDmq4ZcSQAWUOkAFqD4MBgwEBAGXtkAFqDpABagqQAWRggwEBAGQFUwAoaQEAAGHXCgAACnB5cGFyc2luZyBtb2R1bGUgLSBDbGFzc2VzIGFuZCBtZXRob2RzIHRvIGRlZmluZSBhbmQgZXhlY3V0ZSBwYXJzaW5nIGdyYW1tYXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBjcmVhdGluZyBhbmQKZXhlY3V0aW5nIHNpbXBsZSBncmFtbWFycywgdnMuIHRoZSB0cmFkaXRpb25hbCBsZXgveWFjYyBhcHByb2FjaCwgb3IgdGhlCnVzZSBvZiByZWd1bGFyIGV4cHJlc3Npb25zLiAgV2l0aCBweXBhcnNpbmcsIHlvdSBkb24ndCBuZWVkIHRvIGxlYXJuCmEgbmV3IHN5bnRheCBmb3IgZGVmaW5pbmcgZ3JhbW1hcnMgb3IgbWF0Y2hpbmcgZXhwcmVzc2lvbnMgLSB0aGUgcGFyc2luZwptb2R1bGUgcHJvdmlkZXMgYSBsaWJyYXJ5IG9mIGNsYXNzZXMgdGhhdCB5b3UgdXNlIHRvIGNvbnN0cnVjdCB0aGUKZ3JhbW1hciBkaXJlY3RseSBpbiBQeXRob24uCgpIZXJlIGlzIGEgcHJvZ3JhbSB0byBwYXJzZSAiSGVsbG8sIFdvcmxkISIgKG9yIGFueSBncmVldGluZyBvZiB0aGUgZm9ybQpgYCI8c2FsdXRhdGlvbj4sIDxhZGRyZXNzZWU+ISJgYCksIGJ1aWx0IHVwIHVzaW5nIDpjbGFzczpgV29yZGAsCjpjbGFzczpgTGl0ZXJhbGAsIGFuZCA6Y2xhc3M6YEFuZGAgZWxlbWVudHMKKHRoZSA6Y2xhc3M6YCcrJzxQYXJzZXJFbGVtZW50Ll9fYWRkX18+YCBvcGVyYXRvcnMgY3JlYXRlIDpjbGFzczpgQW5kYCBleHByZXNzaW9ucywKYW5kIHRoZSBzdHJpbmdzIGFyZSBhdXRvLWNvbnZlcnRlZCB0byA6Y2xhc3M6YExpdGVyYWxgIGV4cHJlc3Npb25zKTo6CgogICAgZnJvbSBwaXAuX3ZlbmRvci5weXBhcnNpbmcgaW1wb3J0IFdvcmQsIGFscGhhcwoKICAgICMgZGVmaW5lIGdyYW1tYXIgb2YgYSBncmVldGluZwogICAgZ3JlZXQgPSBXb3JkKGFscGhhcykgKyAiLCIgKyBXb3JkKGFscGhhcykgKyAiISIKCiAgICBoZWxsbyA9ICJIZWxsbywgV29ybGQhIgogICAgcHJpbnQgKGhlbGxvLCAiLT4iLCBncmVldC5wYXJzZVN0cmluZyhoZWxsbykpCgpUaGUgcHJvZ3JhbSBvdXRwdXRzIHRoZSBmb2xsb3dpbmc6OgoKICAgIEhlbGxvLCBXb3JsZCEgLT4gWydIZWxsbycsICcsJywgJ1dvcmxkJywgJyEnXQoKVGhlIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ3JhbW1hciBpcyBxdWl0ZSByZWFkYWJsZSwgb3dpbmcgdG8gdGhlCnNlbGYtZXhwbGFuYXRvcnkgY2xhc3MgbmFtZXMsIGFuZCB0aGUgdXNlIG9mICcrJywgJ3wnIGFuZCAnXicgb3BlcmF0b3JzLgoKVGhlIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QgcmV0dXJuZWQgZnJvbQo6Y2xhc3M6YFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmdgIGNhbiBiZQphY2Nlc3NlZCBhcyBhIG5lc3RlZCBsaXN0LCBhIGRpY3Rpb25hcnksIG9yIGFuIG9iamVjdCB3aXRoIG5hbWVkCmF0dHJpYnV0ZXMuCgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBoYW5kbGVzIHNvbWUgb2YgdGhlIHByb2JsZW1zIHRoYXQgYXJlIHR5cGljYWxseQp2ZXhpbmcgd2hlbiB3cml0aW5nIHRleHQgcGFyc2VyczoKCiAgLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUKICAgICJIZWxsbyxXb3JsZCEiLCAiSGVsbG8gICwgIFdvcmxkICAhIiwgZXRjLikKICAtIHF1b3RlZCBzdHJpbmdzCiAgLSBlbWJlZGRlZCBjb21tZW50cwoKCkdldHRpbmcgU3RhcnRlZCAtCi0tLS0tLS0tLS0tLS0tLS0tClZpc2l0IHRoZSBjbGFzc2VzIDpjbGFzczpgUGFyc2VyRWxlbWVudGAgYW5kIDpjbGFzczpgUGFyc2VSZXN1bHRzYCB0bwpzZWUgdGhlIGJhc2UgY2xhc3NlcyB0aGF0IG1vc3Qgb3RoZXIgcHlwYXJzaW5nCmNsYXNzZXMgaW5oZXJpdCBmcm9tLiBVc2UgdGhlIGRvY3N0cmluZ3MgZm9yIGV4YW1wbGVzIG9mIGhvdyB0bzoKCiAtIGNvbnN0cnVjdCBsaXRlcmFsIG1hdGNoIGV4cHJlc3Npb25zIGZyb20gOmNsYXNzOmBMaXRlcmFsYCBhbmQKICAgOmNsYXNzOmBDYXNlbGVzc0xpdGVyYWxgIGNsYXNzZXMKIC0gY29uc3RydWN0IGNoYXJhY3RlciB3b3JkLWdyb3VwIGV4cHJlc3Npb25zIHVzaW5nIHRoZSA6Y2xhc3M6YFdvcmRgCiAgIGNsYXNzCiAtIHNlZSBob3cgdG8gY3JlYXRlIHJlcGV0aXRpdmUgZXhwcmVzc2lvbnMgdXNpbmcgOmNsYXNzOmBaZXJvT3JNb3JlYAogICBhbmQgOmNsYXNzOmBPbmVPck1vcmVgIGNsYXNzZXMKIC0gdXNlIDpjbGFzczpgJysnPEFuZD5gLCA6Y2xhc3M6YCd8JzxNYXRjaEZpcnN0PmAsIDpjbGFzczpgJ14nPE9yPmAsCiAgIGFuZCA6Y2xhc3M6YCcmJzxFYWNoPmAgb3BlcmF0b3JzIHRvIGNvbWJpbmUgc2ltcGxlIGV4cHJlc3Npb25zIGludG8KICAgbW9yZSBjb21wbGV4IG9uZXMKIC0gYXNzb2NpYXRlIG5hbWVzIHdpdGggeW91ciBwYXJzZWQgcmVzdWx0cyB1c2luZwogICA6Y2xhc3M6YFBhcnNlckVsZW1lbnQuc2V0UmVzdWx0c05hbWVgCiAtIGFjY2VzcyB0aGUgcGFyc2VkIGRhdGEsIHdoaWNoIGlzIHJldHVybmVkIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgCiAgIG9iamVjdAogLSBmaW5kIHNvbWUgaGVscGZ1bCBleHByZXNzaW9uIHNob3J0LWN1dHMgbGlrZSA6Y2xhc3M6YGRlbGltaXRlZExpc3RgCiAgIGFuZCA6Y2xhc3M6YG9uZU9mYAogLSBmaW5kIG1vcmUgdXNlZnVsIGNvbW1vbiBleHByZXNzaW9ucyBpbiB0aGUgOmNsYXNzOmBweXBhcnNpbmdfY29tbW9uYAogICBuYW1lc3BhY2UgY2xhc3MKegUyLjQuN3oVMzAgTWFyIDIwMjAgMDA6NDMgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaCml0ZW1nZXR0ZXIpAdoFd3JhcHMpAdoOY29udGV4dG1hbmFnZXIpAdoLZmlsdGVyZmFsc2UpAdoMaWZpbHRlcmZhbHNlKQHaBVJMb2NrKQHaCEl0ZXJhYmxlKQLaDk11dGFibGVNYXBwaW5n2gdNYXBwaW5nKQHaC09yZGVyZWREaWN0KQHaD1NpbXBsZU5hbWVzcGFjZWMAAAAAAAAAAAAAAAABAAAAQAAAAHMMAAAAZQBaAWQAWgJkAVMAKQJyDgAAAE4pA9oIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX6kAchIAAAByEgAAAPo0L3RtcC9waXAtYnVpbGQtMWZpY29qNHMvcGlwL3BpcC9fdmVuZG9yL3B5cGFyc2luZy5weXIOAAAAlgAAAHMCAAAACAByDgAAAGFBAgAACiAgICBBIGNyb3NzLXZlcnNpb24gY29tcGF0aWJpbGl0eSBjb25maWd1cmF0aW9uIGZvciBweXBhcnNpbmcgZmVhdHVyZXMgdGhhdCB3aWxsIGJlCiAgICByZWxlYXNlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBCeSBzZXR0aW5nIHZhbHVlcyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gVHJ1ZSwKICAgIHRob3NlIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIGluIHByaW9yIHZlcnNpb25zIGZvciBjb21wYXRpYmlsaXR5IGRldmVsb3BtZW50CiAgICBhbmQgdGVzdGluZy4KCiAgICAgLSBjb2xsZWN0X2FsbF9BbmRfdG9rZW5zIC0gZmxhZyB0byBlbmFibGUgZml4IGZvciBJc3N1ZSAjNjMgdGhhdCBmaXhlcyBlcnJvbmVvdXMgZ3JvdXBpbmcKICAgICAgIG9mIHJlc3VsdHMgbmFtZXMgd2hlbiBhbiBBbmQgZXhwcmVzc2lvbiBpcyBuZXN0ZWQgd2l0aGluIGFuIE9yIG9yIE1hdGNoRmlyc3Q7IHNldCB0bwogICAgICAgVHJ1ZSB0byBlbmFibGUgYnVnZml4IHJlbGVhc2VkIGluIHB5cGFyc2luZyAyLjMuMCwgb3IgRmFsc2UgdG8gcHJlc2VydmUKICAgICAgIHByZS0yLjMuMCBoYW5kbGluZyBvZiBuYW1lZCByZXN1bHRzClRhkwMAAApEaWFnbm9zdGljIGNvbmZpZ3VyYXRpb24gKGFsbCBkZWZhdWx0IHRvIEZhbHNlKQogICAgIC0gd2Fybl9tdWx0aXBsZV90b2tlbnNfaW5fbmFtZWRfYWx0ZXJuYXRpb24gLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGVuIGEgcmVzdWx0cwogICAgICAgbmFtZSBpcyBkZWZpbmVkIG9uIGEgTWF0Y2hGaXJzdCBvciBPciBleHByZXNzaW9uIHdpdGggb25lIG9yIG1vcmUgQW5kIHN1YmV4cHJlc3Npb25zCiAgICAgICAob25seSB3YXJucyBpZiBfX2NvbXBhdF9fLmNvbGxlY3RfYWxsX0FuZF90b2tlbnMgaXMgRmFsc2UpCiAgICAgLSB3YXJuX3VuZ3JvdXBlZF9uYW1lZF90b2tlbnNfaW5fY29sbGVjdGlvbiAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoZW4gYSByZXN1bHRzCiAgICAgICBuYW1lIGlzIGRlZmluZWQgb24gYSBjb250YWluaW5nIGV4cHJlc3Npb24gd2l0aCB1bmdyb3VwZWQgc3ViZXhwcmVzc2lvbnMgdGhhdCBhbHNvCiAgICAgICBoYXZlIHJlc3VsdHMgbmFtZXMKICAgICAtIHdhcm5fbmFtZV9zZXRfb25fZW1wdHlfRm9yd2FyZCAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoYW4gYSBGb3J3YXJkIGlzIGRlZmluZWQKICAgICAgIHdpdGggYSByZXN1bHRzIG5hbWUsIGJ1dCBoYXMgbm8gY29udGVudHMgZGVmaW5lZAogICAgIC0gd2Fybl9vbl9tdWx0aXBsZV9zdHJpbmdfYXJnc190b19vbmVvZiAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoYW4gb25lT2YgaXMKICAgICAgIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIG11bHRpcGxlIHN0ciBhcmd1bWVudHMKICAgICAtIGVuYWJsZV9kZWJ1Z19vbl9uYW1lZF9leHByZXNzaW9ucyAtIGZsYWcgdG8gYXV0by1lbmFibGUgZGVidWcgb24gYWxsIHN1YnNlcXVlbnQKICAgICAgIGNhbGxzIHRvIFBhcnNlckVsZW1lbnQuc2V0TmFtZSgpCkZjAQAAAAAAAAACAAAABAAAAEMAAABzJAAAAGcAfABdHH0BfAFqAGQAgwFzHHwBagBkAYMBcgR8AZECcQRTACkCWgdlbmFibGVfWgV3YXJuXykB2gpzdGFydHN3aXRoKQLaAi4w2gJubXISAAAAchIAAAByEwAAAPoKPGxpc3Rjb21wPrwAAABzAgAAAAYAchcAAABjAAAAAAAAAAAAAAAAAgAAAEMAAABzHAAAAGQBdABfAWQBdABfAmQBdABfA2QBdABfBGQAUwApAk5UKQXaCF9fZGlhZ19f2il3YXJuX211bHRpcGxlX3Rva2Vuc19pbl9uYW1lZF9hbHRlcm5hdGlvbtopd2Fybl91bmdyb3VwZWRfbmFtZWRfdG9rZW5zX2luX2NvbGxlY3Rpb27aHndhcm5fbmFtZV9zZXRfb25fZW1wdHlfRm9yd2FyZNold2Fybl9vbl9tdWx0aXBsZV9zdHJpbmdfYXJnc190b19vbmVvZnISAAAAchIAAAByEgAAAHITAAAA2hRfZW5hYmxlX2FsbF93YXJuaW5nc74AAABzCAAAAAABBgEGAQYBch0AAADaC19fdmVyc2lvbl9f2g9fX3ZlcnNpb25UaW1lX1/aCl9fYXV0aG9yX1/aCl9fY29tcGF0X19yGAAAANoDQW5k2g9DYXNlbGVzc0tleXdvcmTaD0Nhc2VsZXNzTGl0ZXJhbNoKQ2hhcnNOb3RJbtoHQ29tYmluZdoERGljdNoERWFjaNoFRW1wdHnaCkZvbGxvd2VkQnnaB0ZvcndhcmTaCkdvVG9Db2x1bW7aBUdyb3Vw2gdLZXl3b3Jk2gdMaW5lRW5k2glMaW5lU3RhcnTaB0xpdGVyYWzaClByZWNlZGVkQnnaCk1hdGNoRmlyc3TaB05vTWF0Y2jaBk5vdEFuedoJT25lT3JNb3Jl2ghPbmx5T25jZdoIT3B0aW9uYWzaAk9y2hJQYXJzZUJhc2VFeGNlcHRpb27aE1BhcnNlRWxlbWVudEVuaGFuY2XaDlBhcnNlRXhjZXB0aW9u2g9QYXJzZUV4cHJlc3Npb27aE1BhcnNlRmF0YWxFeGNlcHRpb27aDFBhcnNlUmVzdWx0c9oUUGFyc2VTeW50YXhFeGNlcHRpb27aDVBhcnNlckVsZW1lbnTaDFF1b3RlZFN0cmluZ9oZUmVjdXJzaXZlR3JhbW1hckV4Y2VwdGlvbtoFUmVnZXjaBlNraXBUb9oJU3RyaW5nRW5k2gtTdHJpbmdTdGFydNoIU3VwcHJlc3PaBVRva2Vu2g5Ub2tlbkNvbnZlcnRlctoFV2hpdGXaBFdvcmTaB1dvcmRFbmTaCVdvcmRTdGFydNoKWmVyb09yTW9yZdoEQ2hhctoJYWxwaGFudW1z2gZhbHBoYXPaCmFscGhhczhiaXTaC2FueUNsb3NlVGFn2gphbnlPcGVuVGFn2g1jU3R5bGVDb21tZW502gNjb2zaEmNvbW1hU2VwYXJhdGVkTGlzdNoQY29tbW9uSFRNTEVudGl0edoMY291bnRlZEFycmF52g9jcHBTdHlsZUNvbW1lbnTaD2RibFF1b3RlZFN0cmluZ9oPZGJsU2xhc2hDb21tZW502g1kZWxpbWl0ZWRMaXN02gZkaWN0T2baDmRvd25jYXNlVG9rZW5z2gVlbXB0edoHaGV4bnVtc9oLaHRtbENvbW1lbnTaEGphdmFTdHlsZUNvbW1lbnTaBGxpbmXaB2xpbmVFbmTaCWxpbmVTdGFydNoGbGluZW5v2gxtYWtlSFRNTFRhZ3PaC21ha2VYTUxUYWdz2g5tYXRjaE9ubHlBdENvbNoRbWF0Y2hQcmV2aW91c0V4cHLaFG1hdGNoUHJldmlvdXNMaXRlcmFs2gpuZXN0ZWRFeHBy2g9udWxsRGVidWdBY3Rpb27aBG51bXPaBW9uZU9m2gdvcEFzc29j2hJvcGVyYXRvclByZWNlZGVuY2XaCnByaW50YWJsZXPaCHB1bmM4Yml02hJweXRob25TdHlsZUNvbW1lbnTaDHF1b3RlZFN0cmluZ9oMcmVtb3ZlUXVvdGVz2hFyZXBsYWNlSFRNTEVudGl0edoLcmVwbGFjZVdpdGjaCnJlc3RPZkxpbmXaD3NnbFF1b3RlZFN0cmluZ9oGc3Jhbmdl2glzdHJpbmdFbmTaC3N0cmluZ1N0YXJ02hB0cmFjZVBhcnNlQWN0aW9u2g11bmljb2RlU3RyaW5n2gx1cGNhc2VUb2tlbnPaDXdpdGhBdHRyaWJ1dGXaDWluZGVudGVkQmxvY2vaD29yaWdpbmFsVGV4dEZvctoHdW5ncm91cNoNaW5maXhOb3RhdGlvbtoLbG9jYXRlZEV4cHLaCXdpdGhDbGFzc9oKQ2xvc2VNYXRjaNoIdG9rZW5NYXDaEHB5cGFyc2luZ19jb21tb27aEXB5cGFyc2luZ191bmljb2Rl2gt1bmljb2RlX3NldNoWY29uZGl0aW9uQXNQYXJzZUFjdGlvbtoCcmXpAwAAAGMBAAAAAAAAAAMAAAALAAAAQwAAAHNgAAAAdAB8AHQBgwJyDnwAUwB5CHQCfACDAVMABAB0A2sKcloBAAEAAQB0AXwAgwFqBHQFagaDAGQBgwJ9AXQHZAKDAX0CfAJqCGQDZASEAIMBAQB8AmoJfAGDAVMAWABkBVMAKQZhHwEAAERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN0cihvYmopIHRoYXQgdHJpZXMgdG8gYmUgVW5pY29kZQogICAgICAgIGZyaWVuZGx5LiBJdCBmaXJzdCB0cmllcyBzdHIob2JqKS4gSWYgdGhhdCBmYWlscyB3aXRoCiAgICAgICAgYSBVbmljb2RlRW5jb2RlRXJyb3IsIHRoZW4gaXQgdHJpZXMgdW5pY29k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dXBwb3J0CiAgICAgICAgICAgb2YgUHl0aG9uIGV4Y2VwdGlvbnMgdGhhdCBtaWdodCBiZSByYWlzZWQgaW4gYSBwYXJzZSBhY3Rpb24pCiAgICAgICAgIC0gZGVwdGggKGRlZmF1bHQ9MTYpIC0gbnVtYmVyIG9mIGxldmVscyBiYWNrIGluIHRoZSBzdGFjayB0cmFjZSB0byBsaXN0IGV4cHJlc3Npb24KICAgICAgICAgICBhbmQgZnVuY3Rpb24gbmFtZXM7IGlmIE5vbmUsIHRoZSBmdWxsIHN0YWNrIHRyYWNlIG5hbWVzIHdpbGwgYmUgbGlzdGVkOyBpZiAwLCBvbmx5CiAgICAgICAgICAgdGhlIGZhaWxpbmcgaW5wdXQgbGluZSwgbWFya2VyLCBhbmQgZXhjZXB0aW9uIHN0cmluZyB3aWxsIGJlIHNob3duCgogICAgICAgIFJldHVybnMgYSBtdWx0aS1saW5lIHN0cmluZyBsaXN0aW5nIHRoZSBQYXJzZXJFbGVtZW50cyBhbmQvb3IgZnVuY3Rpb24gbmFtZXMgaW4gdGhlCiAgICAgICAgZXhjZXB0aW9uJ3Mgc3RhY2sgdHJhY2UuCgogICAgICAgIE5vdGU6IHRoZSBkaWFnbm9zdGljIG91dHB1dCB3aWxsIGluY2x1ZGUgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMKICAgICAgICB0aGF0IGZhaWxlZCB0byBwYXJzZS4gVGhlc2UgcmVwcmVzZW50YXRpb25zIHdpbGwgYmUgbW9yZSBoZWxwZnVsIGlmIHlvdSB1c2UgYHNldE5hbWVgIHRvCiAgICAgICAgZ2l2ZSBpZGVudGlmaWFibGUgbmFtZXMgdG8geW91ciBleHByZXNzaW9ucy4gT3RoZXJ3aXNlIHRoZXkgd2lsbCB1c2UgdGhlIGRlZmF1bHQgc3RyaW5nCiAgICAgICAgZm9ybXMsIHdoaWNoIG1heSBiZSBjcnlwdGljIHRvIHJlYWQuCgogICAgICAgIGV4cGxhaW4oKSBpcyBvbmx5IHN1cHBvcnRlZCB1bmRlciBQeXRob24gMy4KICAgICAgICByAQAAAE76ASBylAAAAPoBXnoIezB9OiB7MX0pAdoHY29udGV4dHLH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M4QAWiFkNGQ1hABaImQ2ZDeEAFojZDhkOYQAWiRkOmQ7hABaJWQ8ZD2EAFomZF9kP2RAhAFaJ2RBZEKEAFooZENkRIQAWilkRWRGhABaKmRgZEhkSYQBWitkSmRLhABaLGRMZE2EAFotZGFkT2RQhAFaLmRRZFKEAFovZFNkVIQAWjBkVWRWhABaMWRXZFiEAFoyZFlkWoQAWjNlNGRiZFtkXIQBgwFaNWQCUwApY3I/AAAAYVMFAABTdHJ1Y3R1cmVkIHBhcnNlIHJlc3VsdHMsIHRvIHByb3ZpZGUgbXVsdGlwbGUgbWVhbnMgb2YgYWNjZXNzIHRvCiAgICB0aGUgcGFyc2VkIGRhdGE6CgogICAgICAgLSBhcyBhIGxpc3QgKGBgbGVuKHJlc3VsdHMpYGApCiAgICAgICAtIGJ5IGxpc3QgaW5kZXggKGBgcmVzdWx0c1swXSwgcmVzdWx0c1sxXWBgLCBldGMuKQogICAgICAgLSBieSBhdHRyaWJ1dGUgKGBgcmVzdWx0cy48cmVzdWx0c05hbWU+YGAgLSBzZWUgOmNsYXNzOmBQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lYCkKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBkYXRlX3N0ciA9IChpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJ5ZWFyIikgKyAnLycKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgiZGF5IikpCiAgICAgICAgIyBlcXVpdmFsZW50IGZvcm06CiAgICAgICAgIyBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQoKICAgICAgICAjIHBhcnNlU3RyaW5nIHJldHVybnMgYSBQYXJzZVJlc3VsdHMgb2JqZWN0CiAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKQoKICAgICAgICBkZWYgdGVzdChzLCBmbj1yZXByKToKICAgICAgICAgICAgcHJpbnQoIiVzIC0+ICVzIiAlIChzLCBmbihldmFsKHMpKSkpCiAgICAgICAgdGVzdCgibGlzdChyZXN1bHQpIikKICAgICAgICB0ZXN0KCJyZXN1bHRbMF0iKQogICAgICAgIHRlc3QoInJlc3VsdFsnbW9udGgnXSIpCiAgICAgICAgdGVzdCgicmVzdWx0LmRheSIpCiAgICAgICAgdGVzdCgiJ21vbnRoJyBpbiByZXN1bHQiKQogICAgICAgIHRlc3QoIidtaW51dGVzJyBpbiByZXN1bHQiKQogICAgICAgIHRlc3QoInJlc3VsdC5kdW1wKCkiLCBzdHIpCgogICAgcHJpbnRzOjoKCiAgICAgICAgbGlzdChyZXN1bHQpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIHJlc3VsdFswXSAtPiAnMTk5OScKICAgICAgICByZXN1bHRbJ21vbnRoJ10gLT4gJzEyJwogICAgICAgIHJlc3VsdC5kYXkgLT4gJzMxJwogICAgICAgICdtb250aCcgaW4gcmVzdWx0IC0+IFRydWUKICAgICAgICAnbWludXRlcycgaW4gcmVzdWx0IC0+IEZhbHNlCiAgICAgICAgcmVzdWx0LmR1bXAoKSAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KICAgICAgICAtIGRheTogMzEKICAgICAgICAtIG1vbnRoOiAxMgogICAgICAgIC0geWVhcjogMTk5OQogICAgTlRjBQAAAAAAAAAGAAAAAwAAAEMAAABzIgAAAHQAfAF8AIMCcg58AVMAdAFqAnwAgwF9BWQBfAVfA3wFUwApAk5UKQRymgAAANoGb2JqZWN02gdfX25ld19f2hVfUGFyc2VSZXN1bHRzX19kb2luaXQpBnLKAAAA2gd0b2tsaXN02gRuYW1l2gZhc0xpc3TaBW1vZGFs2gZyZXRvYmpyEgAAAHISAAAAchMAAAByCAEAACECAABzCgAAAAABCgEEAQoBBgF6FFBhcnNlUmVzdWx0cy5fX25ld19fYwYAAAAAAAAABgAAAA0AAABDAAAAc2IBAAB8AGoAcnZk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IGBgZGljdGBgIHNlbWFudGljcyBmb3IgYGBwb3AoKWBgLiBJZgogICAgICAgIHBhc3NlZCBubyBhcmd1bWVudCBvciBhbiBpbnRlZ2VyIGFyZ3VtZW50LCBpdCB3aWxsIHVzZSBgYGxpc3RgYAogICAgICAgIHNlbWFudGljcyBhbmQgcG9wIHRva2VucyBmcm9tIHRoZSBsaXN0IG9mIHBhcnNlZCB0b2tlbnMuIElmIHBhc3NlZAogICAgICAgIGEgbm9uLWludGVnZXIgYXJndW1lbnQgKG1vc3QgbGlrZWx5IGEgc3RyaW5nKSwgaXQgd2lsbCB1c2UgYGBkaWN0YGAKICAgICAgICBzZW1hbnRpY3MgYW5kIHBvcCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBmcm9tIGFueSBkZWZpbmVkIHJlc3VsdHMKICAgICAgICBuYW1lcy4gQSBzZWNvbmQgZGVmYXVsdCByZXR1cm4gdmFsdWUgYXJndW1lbnQgaXMgc3VwcG9ydGVkLCBqdXN0IGFzIGluCiAgICAgICAgYGBkaWN0LnBvcCgpYGAuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgZGVmIHJlbW92ZV9maXJzdCh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgwKQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkucGFyc2VTdHJpbmcoIjAgMTIzIDMyMSIpKSAjIC0+IFsnMCcsICcxMjMnLCAnMzIxJ10KICAgICAgICAgICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9maXJzdCkucGFyc2VTdHJpbmcoIjAgMTIzIDMyMSIpKSAjIC0+IFsnMTIzJywgJzMyMSddCgogICAgICAgICAgICBsYWJlbCA9IFdvcmQoYWxwaGFzKQogICAgICAgICAgICBwYXR0ID0gbGFiZWwoIkxBQkVMIikgKyBPbmVPck1vcmUoV29yZChudW1zKSkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCgogICAgICAgICAgICAjIFVz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c3Npb24uIFVzZWZ1bCB3aGVuIHNldmVyYWwKICAgICAgICBkaWZmZXJlbnQgZXhwcmVzc2lvbnMgbWlnaHQgbWF0Y2ggYXQgYSBwYXJ0aWN1bGFyIGxvY2F0aW9uLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIHNzbl9leHByID0gUmVnZXgociJcZFxkXGQtXGRcZC1cZFxkXGRcZCIpCiAgICAgICAgICAgIGhvdXNlX251bWJlcl9leHByID0gU3VwcHJlc3MoJyMnKSArIFdvcmQobnVtcywgYWxwaGFudW1zKQogICAgICAgICAgICB1c2VyX2RhdGEgPSAoR3JvdXAoaG91c2VfbnVtYmVyX2V4cHIpKCJob3VzZV9udW1iZXIiKQogICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwKHNzbl9leHByKSgic3NuIikKICAgICAgICAgICAgICAgICAgICAgICAgfCBHcm91cChpbnRlZ2VyKSgiYWdlIikpCiAgICAgICAgICAgIHVzZXJfaW5mbyA9IE9uZU9yTW9yZSh1c2VyX2RhdGEpCgogICAgICAgICAgICByZXN1bHQgPSB1c2VyX2luZm8ucGFyc2VTdHJpbmcoIjIyIDExMS0yMi0zMzMzICMyMjFCIikKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gcmVzdWx0OgogICAgICAgICAgICAgICAgcHJpbnQoaXRlbS5nZXROYW1lKCksICc6JywgaXRlbVswXSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIGFnZSA6IDIyCiAgICAgICAgICAgIHNzbiA6IDExMS0yMi0zMzMzCiAgICAgICAgICAgIGhvdXNlX251bWJlciA6IDIyMUIKICAgICAgICBOcpQAAAByAQAAAHKVAAAAKQJyAQAAAHKVAAAAKQlyDwEAAHIQAQAA2hVfUGFyc2VSZXN1bHRzX19sb29rdXBy0gAAAHIYAQAA2gRuZXh0cjEBAAByOwEAAHI5AQAAKQJyxwAAANoDcGFychIAAAByEgAAAHITAAAA2gdnZXROYW1lAQQAAHMYAAAAABkGAQYBBgEIAQQBCgIGAQwB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eS9wcHJpbnQuaHRtbD5gXyBtb2R1bGUuCiAgICAgICAgQWNjZXB0cyBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgb3Iga2V5d29yZCBhcmdzIGFzIGRlZmluZWQgZm9yCiAgICAgICAgYHBwcmludC5wcHJpbnQgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQucHByaW50PmBfIC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBpZGVudCA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgICAgIG51bSA9IFdvcmQobnVtcykKICAgICAgICAgICAgZnVuYyA9IEZvcndhcmQoKQogICAgICAgICAgICB0ZXJtID0gaWRlbnQgfCBudW0gfCBHcm91cCgnKCcgKyBmdW5jICsgJyknKQogICAgICAgICAgICBmdW5jIDw8PSBpZGVudCArIEdyb3VwKE9wdGlvbmFsKGRlbGltaXRlZExpc3QodGVybSkpKQogICAgICAgICAgICByZXN1bHQgPSBmdW5jLnBhcnNlU3RyaW5nKCJmbmEgYSxiLChmbmIgYyxkLDIwMCksMTAwIikKICAgICAgICAgICAgcmVzdWx0LnBwcmludCh3aWR0aD00MCkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIFsnZm5hJywKICAgICAgICAgICAgIFsnYScsCiAgICAgICAgICAgICAgJ2InLAogICAgICAgICAgICAgIFsnKCcsICdmbmInLCBbJ2MnLCAnZCcsICcyMDAnXSwgJyknXSwKICAgICAgICAgICAgICAnMTAwJ11dCiAgICAgICAgTikC2gZwcHJpbnRyDAEAACkDcscAAAByxgAAAHI/AQAAchIAAAByEgAAAHITAAAAcnwBAABqBAAAcwIAAAAAGXoTUGFyc2VSZXN1bHRzLnBwcmludGMBAAAAAAAAAAEAAAAFAAAAQwAAAHMuAAAAfABqAHwAagFqAoMAfABqA2QAawlyHnwAagODAHAgZAB8AGoEfABqBWYEZgJTACkBTikGchUBAAByGAEAAHJMAQAAchABAAByEQEAAHIPAQAAKQFyxwAAAHISAAAAchIAAABy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ICAgICAgICAgICBXb3JkKG51bXMpLnBhcnNlU3RyaW5nKCJBQkMiKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIFc6KDAxMjMuLi4pIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICAgICAgV29yZChudW1zKS5zZXROYW1lKCJpbnRlZ2VyIikucGFyc2VTdHJpbmcoIkFCQyIpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgaW50ZWdlciAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAgeglFeHBlY3RlZCApBXILAQAAcsMBAAByGAAAANohZW5hYmxlX2RlYnVnX29uX25hbWVkX2V4cHJlc3Npb25z2ghzZXREZWJ1ZykCcscAAAByCwEAAHISAAAAchIAAAByEwAAANoHc2V0TmFtZawFAABzCgAAAAAJBgEMAQYBCAF6FVBhcnNlckVsZW1lbnQuc2V0TmFtZWMDAAAAAAAAAAMAAAADAAAAQwAAAHMMAAAAfABqAHwBfAKDAlMAKQFhTwMAAAogICAgICAgIERlZmluZSBuYW1lIGZvciByZWZlcmVuY2luZyBtYXRjaGluZyB0b2tlbnMgYXMgYSBuZXN0ZWQgYXR0cmlidXRlCiAgICAgICAgb2YgdGhlIHJldHVybmVkIHBhcnNlIHJlc3VsdHMuCiAgICAgICAgTk9URTogdGhpcyByZXR1cm5zIGEgKmNvcHkqIG9mIHRoZSBvcmlnaW5hbCA6Y2xhc3M6YFBhcnNlckVsZW1lbnRgIG9iamVjdDsKICAgICAgICB0aGlzIGlzIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZGVmaW5lIGEgYmFzaWMgZWxlbWVudCwgc3VjaCBhcyBhbgogICAgICAgIGludGVnZXIsIGFuZCByZWZlcmVuY2UgaXQgaW4gbXVsdGlwbGUgcGxhY2VzIHdpdGggZGlmZmVyZW50IG5hbWVzLgoKICAgICAgICBZb3UgY2FuIGFsc28gc2V0IHJlc3VsdHMgbmFtZXMgdXNpbmcgdGhlIGFiYnJldmlhdGVkIHN5bnRheCwKICAgICAgICBgYGV4cHIoIm5hbWUiKWBgIGluIHBsYWNlIG9mIGBgZXhwci5zZXRSZXN1bHRzTmFtZSgibmFtZSIpYGAKICAgICAgICAtIHNlZSA6Y2xhc3M6YF9fY2FsbF9fYC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBkYXRlX3N0ciA9IChpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJ5ZWFyIikgKyAnLycKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgiZGF5IikpCgogICAgICAgICAgICAjIGVxdWl2YWxlbnQgZm9ybToKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKICAgICAgICApAdoPX3NldFJlc3VsdHNOYW1lKQNyxwAAAHILAQAA2g5saXN0QWxsTWF0Y2hlc3ISAAAAchIAAAByEwAAANoOc2V0UmVzdWx0c05hbWW7BQAAcwIAAAAAFXocUGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZWMDAAAAAAAAAAQAAAADAAAAQwAAAHM0AAAAfABqAIMAfQN8AWoBZAGDAXIifAFkAGQEhQIZAH0BZAN9AnwBfANfAnwCDAB8A18DfANTACkFTtoBKnKUAAAAVHKVAAAAKQRyTAEAANoIZW5kc3dpdGhyuAEAAHLEAQAAKQRyxwAAAHILAQAAcs4BAADaB25ld3NlbGZyEgAAAHISAAAAchMAAAByzQEAANIFAABzDgAAAAABCAEKAQwBBAEGAQgBeh1QYXJzZXJFbGVtZW50Ll9zZXRSZXN1bHRzTmFtZVRjAgAAAAAAAAADAAAABAAAAAMAAABzQAAAAHwBciZ8AGoAiQBkBYcAZgFkAmQDhAl9AogAfAJfAXwCfABfAG4WdAJ8AGoAZASDAnI8fABqAGoBfABfAHwAUwApBnqnTWV0aG9kIHRvIGludm9rZSB0aGUgUHl0aG9uIHBkYiBkZWJ1Z2dlciB3aGVuIHRoaXMgZWxlbWVudCBpcwogICAgICAgICAgIGFib3V0IHRvIGJlIHBhcnNlZC4gU2V0IGBgYnJlYWtGbGFnYGAgdG8gVHJ1ZSB0byBlbmFibGUsIEZhbHNlIHRvCiAgICAgICAgICAgZGlzYWJsZS4KICAgICAgICBUYwQAAAAAAAAABQAAAAUAAAATAAAAcx4AAABkAWQAbAB9BHwEagGDAAEAiAB8AHwBfAJ8A4MEUwApAk5yAQAAACkC2gNwZGLaCXNldF90cmFjZSkFco4BAABywwAAANoJZG9BY3Rpb25z2gxjYWxsUHJlUGFyc2Vy0wEAACkB2gxfcGFyc2VNZXRob2RyEgAAAHITAAAA2gdicmVha2Vy4gUAAHMGAAAAAAEIAggBeidQYXJzZXJFbGVtZW50LnNldEJyZWFrLjxsb2NhbHM+LmJyZWFrZXLaFF9vcmlnaW5hbFBhcnNlTWV0aG9kKQJUVCkD2gZfcGFyc2Vy2QEAAHI1AQAAKQNyxwAAANoJYnJlYWtGbGFnctgBAAByEgAAACkBctcBAAByEwAAANoIc2V0QnJlYWvbBQAAcxAAAAAABQQBBgEOBQYBCAIMAQoBehZQYXJzZXJFbGVtZW50LnNldEJyZWFrYwEAAAAAAAAAAwAAAAUAAABPAAAAc1YAAAB0AHwBgwFkAWcBawJyFmcAfABfAW48dAJkAmQDhAB8AUQAgwGDAXMwdANkBIMBggF0AHQEdAV0AHwBgwGDAoMBfABfAXwCagZkBWQGgwJ8AF8HfABTACkHYZIHAAAKICAgICAgICBEZWZpbmUgb25lIG9yIG1vcmUgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gc3VjY2Vzc2Z1bGx5IG1hdGNoaW5nIHBhcnNlIGVsZW1lbnQgZGVmaW5pdGlvbi4KICAgICAgICBQYXJzZSBhY3Rpb24gZm4gaXMgYSBjYWxsYWJsZSBtZXRob2Qgd2l0aCAwLTMgYXJndW1lbnRzLCBjYWxsZWQgYXMgYGBmbihzLCBsb2MsIHRva3MpYGAgLAogICAgICAgIGBgZm4obG9jLCB0b2tzKWBgICwgYGBmbih0b2tzKWBgICwgb3IganVzdCBgYGZuKClgYCAsIHdoZXJlOgoKICAgICAgICAtIHMgICA9IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVpbmcgcGFyc2VkIChzZWUgbm90ZSBiZWxvdykKICAgICAgICAtIGxvYyA9IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nCiAgICAgICAgLSB0b2tzID0gYSBsaXN0IG9mIHRoZSBtYXRjaGVkIHRva2VucywgcGFja2FnZWQgYXMgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0CgogICAgICAgIElmIHRoZSBmdW5jdGlvbnMgaW4gZm5zIG1vZGlmeSB0aGUgdG9rZW5zLCB0aGV5IGNhbiByZXR1cm4gdGhlbSBhcyB0aGUgcmV0dXJuCiAgICAgICAgdmFsdWUgZnJvbSBmbiwgYW5kIHRoZSBtb2RpZmllZCBsaXN0IG9mIHRva2VucyB3aWxsIHJlcGxhY2UgdGhlIG9yaWdpbmFsLgogICAgICAgIE90aGVyd2lzZSwgZm4gZG9lcyBub3QgbmVlZCB0byByZXR1cm4gYW55IHZhbHVlLgoKICAgICAgICBJZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgcGFyc2UgYWN0aW9uLCBhbGwgcHJldmlvdXNseSBhZGRlZCBwYXJzZSBhY3Rpb25zIGZvciB0aGlzCiAgICAgICAgZXhwcmVzc2lvbiBhcmUgY2xlYXJlZC4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgLSBjYWxsRHVyaW5nVHJ5ID0gKGRlZmF1bHQ9IGBgRmFsc2VgYCkgaW5kaWNhdGUgaWYgcGFyc2UgYWN0aW9uIHNob3VsZCBiZSBydW4gZHVyaW5nIGxvb2thaGVhZHMgYW5kIGFsdGVybmF0ZSB0ZXN0aW5nCgogICAgICAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICAgICAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIDpjbGFzczpgcGFyc2VTdHJpbmcgZm9yIG1vcmUKICAgICAgICBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBgYDxUQUI+YGAgcywgYW5kIHN1Z2dlc3RlZAogICAg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MnQAagxylIIAbiJ0DXwHZAJkA4MDZANrCXKyfABqDnwHag+DAXwHXw98B4IBVwBZAGQDZAN9B34HWABuBlgAfAVTAGQDUwApBGH7BQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIFJldHVybnMgdGhlIHBhcnNlZCBkYXRhIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIG9iamVjdCwgd2hpY2ggbWF5IGJlCiAgICAgICAgYWNjZXNzZWQgYXMgYSBsaXN0LCBvciBhcyBhIGRpY3Qgb3Igb2JqZWN0IHdpdGggYXR0cmlidXRlcyBpZiB0aGUgZ2l2ZW4gcGFyc2VyCiAgICAgICAgaW5jbHVkZXMgcmVzdWx0cyBuYW1lcy4KCiAgICAgICAgSWYgeW91IHdhbnQgdGhlIGdyYW1tYXIgdG8gcmVxdWlyZSB0aGF0IHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGJlCiAgICAgICAgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgdGhlbiBzZXQgYGBwYXJzZUFsbGBgIHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBgYFN0cmluZ0VuZCgpYGApLgoKICAgICAgICBOb3RlOiBgYHBhcnNlU3RyaW5nYGAgaW1wbGljaXRseSBjYWxscyBgYGV4cGFuZHRhYnMoKWBgIG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIGBgbG9jYGAgYXJndW1lbnQgdG8gaW5kZXggaW50byB0aGUKICAgICAgICBzdHJpbmcgYmVpbmcgcGFyc2VkLCB5b3UgY2FuIGVuc3VyZSB5b3UgaGF2ZSBhIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgaW5wdXQKICAgICAgICBzdHJpbmcgYnk6CgogICAgICAgIC0gY2FsbGluZyBgYHBhcnNlV2l0aFRhYnNgYCBvbiB5b3VyIGdyYW1tYXIgYmVmb3JlIGNhbGxpbmcgYGBwYXJzZVN0cmluZ2BgCiAgICAgICAgICAoc2VlIDpjbGFzczpgcGFyc2VXaXRoVGFic2ApCiAgICAgICAgLSBkZWZpbmUgeW91ciBwYXJzZSBhY3Rpb24gdXNpbmcgdGhlIGZ1bGwgYGAocywgbG9jLCB0b2tzKWBgIHNpZ25hdHVyZSwgYW5kCiAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgYGBzYGAgYXJndW1lbnQKICAgICAgICAtIGV4cGxpY3RseSBleHBhbmQgdGhlIHRhYnMgaW4geW91ciBpbnB1dCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcKICAgICAgICAgIGBgcGFyc2VTdHJpbmdgYAoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIFdvcmQoJ2EnKS5wYXJzZVN0cmluZygnYWFhYWFiYWFhJykgICMgLT4gWydhYWFhYSddCiAgICAgICAgICAgIFdvcmQoJ2EnKS5wYXJzZVN0cmluZygnYWFhYWFiYWFhJywgcGFyc2VBbGw9VHJ1ZSkgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBlbmQgb2YgdGV4dAogICAgICAgIHIBAAAAcu4AAABOKRByQQAAAHILAgAAcsEBAADaCnN0cmVhbWxpbmVyvwEAAHK+AQAA2gpleHBhbmR0YWJzctoBAABy6gEAAHIpAAAAckYAAAByOgAAANoSdmVyYm9zZV9zdGFja3RyYWNlcqoBAABytAEAAHLuAAAAKQhyxwAAAHKOAQAA2ghwYXJzZUFsbHLlAQAAcsMAAABy8QEAANoCc2Vy9gAAAHISAAAAchIAAAByEwAAANoLcGFyc2VTdHJpbmdtBwAAcygAAAAAIQgBBgEIAgwBDAEGAQgBAgEQAQQBDAEMARABEAEGAQQDEAEOARYCehlQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nYwQAAAAAAAAADwAAABEAAABjAAAAc2ABAAB8AGoAcw58AGoBgwABAHgWfABqAkQAXQx9BHwEagGDAAEAcRZXAHwAagNzOHQEfAGDAWoFgwB9AXQGfAGDAX0FZAF9BnwAagd9B3wAagh9CHQJagqDAAEAZAF9CXmqeKR8BnwFawFvbnwJfAJrAJABcgJ5IHwHfAF8BoMCfQp8CHwBfApkAmQDjQNcAn0LfQxXAG4cBAB0C2sKcq4BAAEAAQB8CmQEFwB9BlkAcWBYAHwLfAZrBHL4fAlkBDcAfQl8DHwKfAtmA1YAAQB8A3LyfAd8AXwGgwJ9DXwNfAZrBHLofAt9BnH2fAZkBDcAfQZuBHwLfQZxYHwKZAQXAH0GcWBXAFcAblQEAHQMawqQAXJaAQB9DgEAejZ0CWoNkAFyJoIAbiR0DnwOZAVkBoMDZAZrCZABckZ8AGoPfA5qEIMBfA5fEHwOggFXAFkAZAZkBn0Ofg5YAG4CWABkBlMAKQdhcQQAAAogICAgICAgIFNjYW4gdGhlIGlucHV0IHN0cmluZyBmb3IgZXhwcmVzc2lvbiBtYXRjaGVzLiAgRWFjaCBtYXRjaCB3aWxsIHJldHVybiB0aGUKICAgICAgICBtYXRjaGluZyB0b2tlbnMsIHN0YXJ0IGxvY2F0aW9uLCBhbmQgZW5kIGxvY2F0aW9uLiAgTWF5IGJlIGNhbGxlZCB3aXRoIG9wdGlvbmFsCiAgICAgICAgYGBtYXhNYXRjaGVzYGAgYXJndW1lbnQsIHRvIGNsaXAgc2Nhbm5pbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLiAgSWYKICAgICAgICBgYG92ZXJsYXBgYCBpcyBzcGVjaWZpZWQsIHRoZW4gb3ZlcmxhcHBpbmcgbWF0Y2hlcyB3aWxsIGJlIHJlcG9ydGVkLgoKICAgICAgICBOb3RlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgbG9jYXRpb25zIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgc3RyaW5nCiAgICAgICAgYmVpbmcgcGFyc2VkLiAgU2VlIDpjbGFzczpgcGFyc2VTdHJpbmdgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcKICAgICAgICBzdHJpbmdzIHdpdGggZW1iZWRkZWQgdGFicy4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBzb3VyY2UgPSAic2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3IgogICAgICAgICAgICBwcmludChzb3VyY2UpCiAgICAgICAgICAgIGZvciB0b2tlbnMsIHN0YXJ0LCBlbmQgaW4gV29yZChhbHBoYXMpLnNjYW5TdHJpbmcoc291cmNlKToKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArICdeJyooZW5kLXN0YXJ0KSkKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArIHRva2Vuc1swXSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIHNsZGpmMTIzbHNkamprZjM0NXNsZGtqZjg3OWxranNmZDk4NwogICAgICAgICAgICBeXl5eXgogICAgICAgICAgICBzbGRqZgogICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KICAgICAgICAgICAgICAgICAgICBsc2RqamtmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGRramYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxranNmZAogICAgICAgIHIBAAAARikBctYBAABylAAAAHLuAAAATikRcsEBAAByEAIAAHK/AQAAcr4BAABypQAAAHIRAgAActIAAABy6gEAAHLaAQAAckEAAAByCwIAAHI8AAAAcjoAAAByEgIAAHKqAQAAcrQBAABy7gAAACkPcscAAAByjgEAANoKbWF4TWF0Y2hlc9oHb3ZlcmxhcHLlAQAAcukBAABywwAAANoKcHJlcGFyc2VGbtoHcGFyc2VGbtoHbWF0Y2hlc3LvAQAA2gduZXh0TG9jcvEBAADaB25leHRsb2Ny9gAAAHISAAAAchIAAAByEwAAANoKc2NhblN0cmluZ6cHAABzRgAAAAAfBgEIAQwBDAIGAQwBCAEEAQYBBgEIAQQBAgEUAQIBCgEWAQ4BDgIIAQgBDAEEAQoBCAEGAgoCBgIQARIBCAEEAxIBDgF6GFBhcnNlckVsZW1lbnQuc2NhblN0cmluZ2MCAAAAAAAAAAgAAAAQAAAAQwAAAHMAAQAAZwB9AmQBfQNkAnwAXwB5nnhofABqAXwBgwFEAF1aXAN9BH0FfQZ8AmoCfAF8A3wFhQIZAIMBAQB8BHJydAN8BHQEgwJyVHwCfARqBYMANwB9Am4edAN8BHQGgwJyaHwCfAQ3AH0Cbgp8AmoCfASDAQEAfAZ9A3EcVwB8AmoCfAF8A2QDhQIZAIMBAQBkBGQFhAB8AkQAgwF9AmQGagd0CHQJdAp8AoMBgwKDAVMABAB0C2sKcvoBAH0HAQB6MnQMag1yyIIAbiJ0DnwHZAdkA4MDZANrCXLmfABqD3wHahCDAXwHXxB8B4IBVwBZAGQDZAN9B34HWABuAlgAZANTACkIYVsDAAAKICAgICAgICBFeHRlbnNpb24gdG8gOmNsYXNzOmBzY2FuU3RyaW5nYCwgdG8gbW9kaWZ5IG1hdGNoaW5nIHRleHQgd2l0aCBtb2RpZmllZCB0b2tlbnMgdGhhdCBtYXkKICAgICAgICBiZSByZXR1cm5lZCBmcm9tIGEgcGFyc2UgYWN0aW9uLiAgVG8gdXNlIGBgdHJhbnNmb3JtU3RyaW5nYGAsIGRlZmluZSBhIGdyYW1tYXIgYW5kCiAgICAgICAgYXR0YWNoIGEgcGFyc2UgYWN0aW9uIHRvIGl0IHRoYXQgbW9kaWZpZXMgdGhlIHJldHVybmVkIHRva2VuIGxpc3QuCiAgICAgICAgSW52b2tpbmcgYGB0cmFuc2Zvcm1TdHJpbmcoKWBgIG9uIGEgdGFyZ2V0IHN0cmluZyB3aWxsIHRoZW4gc2NhbiBmb3IgbWF0Y2hlcywKICAgICAgICBhbmQgcmVwbGFjZSB0aGUgbWF0Y2hlZCB0ZXh0IHBhdHRlcm5zIGFjY29yZGluZyB0byB0aGUgbG9naWMgaW4gdGhlIHBhcnNlCiAgICAgICAgYWN0aW9uLiAgYGB0cmFuc2Zvcm1TdHJpbmcoKWBgIHJldHVybnMgdGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBzdHJpbmcuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgd2QgPSBXb3JkKGFscGhhcykKICAgICAgICAgICAgd2Quc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IHRva3NbMF0udGl0bGUoKSkKCiAgICAgICAgICAgIHByaW50KHdkLnRyYW5zZm9ybVN0cmluZygibm93IGlzIHRoZSB3aW50ZXIgb2Ygb3VyIGRpc2NvbnRlbnQgbWFkZSBnbG9yaW91cyBzdW1tZXIgYnkgdGhpcyBzdW4gb2YgeW9yay4iKSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIE5vdyBJcyBUaGUgV2ludGVyIE9mIE91ciBEaXNjb250ZW50IE1hZGUgR2xvcmlvdXMgU3VtbWVyIEJ5IFRoaXMgU3VuIE9mIFlvcmsuCiAgICAgICAgcgEAAABUTmMBAAAAAAAAAAIAAAADAAAAUwAAAHMUAAAAZwB8AF0MfQF8AXIEfAGRAnEEUwByEgAAAHISAAAAKQJyFQAAANoBb3ISAAAAchIAAAByEwAAAHIXAAAAFggAAHMCAAAABgB6MVBhcnNlckVsZW1lbnQudHJhbnNmb3JtU3RyaW5nLjxsb2NhbHM+LjxsaXN0Y29tcD5ytgAAAHLuAAAAKRFyvgEAAHIdAgAAcuwAAABymgAAAHI/AAAAcgwBAAByFAEAAHLWAAAAct8BAABypQAAANoIX2ZsYXR0ZW5yOgAAAHJBAAAAchICAAByqgEAAHK0AQAAcu4AAAApCHLHAAAAco4BAAByWwEAANoFbGFzdEVymAAAAHKqAAAAcuUBAABy9gAAAHISAAAAchIAAAByEwAAAHKiAAAA8QcAAHMsAAAAABQEAQQDBgECARYBEgEEAQoBDgEKAQoCCgEIARIBDgEUARABBgEEAxABDgF6HVBhcnNlckVsZW1lbnQudHJhbnNmb3JtU3RyaW5nYwMAAAAAAAAABAAAABAAAABDAAAAc24AAAB5GnQAZAFkAoQAfABqAXwBfAKDAkQAgwGDAVMABAB0AmsKcmgBAH0DAQB6MnQDagRyNoIAbiJ0BXwDZANkBIMDZARrCXJUfABqBnwDageDAXwDXwd8A4IBVwBZAGQEZAR9A34DWABuAlgAZARTACkFYaADAAAKICAgICAgICBBbm90aGVyIGV4dGVuc2lvbiB0byA6Y2xhc3M6YHNjYW5TdHJpbmdgLCBzaW1wbGlmeWluZyB0aGUgYWNjZXNzIHRvIHRoZSB0b2tlbnMgZm91bmQKICAgICAgICB0byBtYXRjaCB0aGUgZ2l2ZW4gcGFyc2UgZXhwcmVzc2lvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIGBgbWF4TWF0Y2hlc2BgIGFyZ3VtZW50LCB0byBjbGlwIHNlYXJjaGluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgIyBhIGNhcGl0YWxpemVkIHdvcmQgc3RhcnRzIHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciwgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlIGxvd2VyY2FzZSBsZXR0ZXJzCiAgICAgICAgICAgIGNhcF93b3JkID0gV29yZChhbHBoYXMudXBwZXIoKSwgYWxwaGFzLmxvd2VyKCkpCgogICAgICAgICAgICBwcmludChjYXBfd29yZC5zZWFyY2hTdHJpbmcoIk1vcmUgdGhhbiBJcm9uLCBtb3JlIHRoYW4gTGVhZCwgbW9yZSB0aGFuIEdvbGQgSSBuZWVkIEVsZWN0cmljaXR5IikpCgogICAgICAgICAgICAjIHRoZSBzdW0oKSBidWlsdGluIGNhbiBiZSB1c2VkIHRvIG1lcmdlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBQYXJzZVJlc3VsdHMgb2JqZWN0CiAgICAgICAgICAgIHByaW50KHN1bShjYXBfd29yZC5zZWFyY2hTdHJpbmcoIk1vcmUgdGhhbiBJcm9uLCBtb3JlIHRoYW4gTGVhZCwgbW9yZSB0aGFuIEdvbGQgSSBuZWVkIEVsZWN0cmljaXR5IikpKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgW1snTW9yZSddLCBbJ0lyb24nXSwgWydMZWFkJ10sIFsnR29sZCddLCBbJ0knXSwgWydFbGVjdHJp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cy4gIFR1cGxlcwogICAgICAgIG1heSBhbHNvIGluY2x1ZGUgYGBOb25lYGAgYXMgaW46CiAgICAgICAgIC0gYGBleHByKihuLCBOb25lKWBgIG9yIGBgZXhwcioobiwgKWBgIGlzIGVxdWl2YWxlbnQKICAgICAgICAgICAgICB0byBgYGV4cHIqbiArIFplcm9Pck1vcmUoZXhwcilgYAogICAgICAgICAgICAgIChyZWFkIGFzICJhdCBsZWFzdCBuIGluc3RhbmNlcyBvZiBgYGV4cHJgYCIpCiAgICAgICAgIC0gYGBleHByKihOb25lLCBuKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBleHByKigwLCBuKWBgCiAgICAgICAgICAgICAgKHJlYWQgYXMgIjAgdG8gbiBpbnN0YW5jZXMgb2YgYGBleHByYGAiKQogICAgICAgICAtIGBgZXhwciooTm9uZSwgTm9uZSlgYCBpcyBlcXVpdmFsZW50IHRvIGBgWmVyb09yTW9yZShleHByKWBgCiAgICAgICAgIC0gYGBleHByKigxLCBOb25lKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBPbmVPck1vcmUoZXhwcilgYAoKICAgICAgICBOb3RlIHRoYXQgYGBleHByKihOb25lLCBuKWBgIGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgIG1vcmUgdGhhbiBuIGV4cHJzIGV4aXN0IGluIHRoZSBpbnB1dCBzdHJlYW07IHRoYXQgaXMsCiAgICAgICAgYGBleHByKihOb25lLCBuKWBgIGRvZXMgbm90IGVuZm9yY2UgYSBtYXhpbXVtIG51bWJlciBvZiBleHByCiAgICAgICAgb2NjdXJyZW5jZXMuICBJZiB0aGlzIGJlaGF2aW9yIGlzIGRlc2lyZWQsIHRoZW4gd3JpdGUKICAgICAgICBgYGV4cHIqKE5vbmUsIG4pICsgfmV4cHJgYAogICAgICAgIHIBAAAATnKUAAAAcpMAAABjAQAAAAAAAAACAAAAAwAAAHMAAABzHgAAAHwAXRZ9AXwBdABrCXISfAFuAmQAVgABAHECZABTACkBTikBcicCAAApAnIVAAAAch4CAAByEgAAAHISAAAAchMAAABypwAAAMMIAABz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Z2luZyBmb3Igd2QKICAgICAgICAgICAgd2Quc2V0RGVidWcoKQoKICAgICAgICAgICAgT25lT3JNb3JlKHRlcm0pLnBhcnNlU3RyaW5nKCJhYmMgMTIzIHh5eiA4OTAiKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAwKDEsMSkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWydhYmMnXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDMoMSw0KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgNygxLDgpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsneHl6J10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxMSgxLDEyKQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxMiksIChsaW5lOjEsIGNvbDoxMykKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxNSgxLDE2KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxNSksIChsaW5lOjEsIGNvbDoxNikKCiAgICAgICAgVGhlIG91dHB1dCBzaG93biBpcyB0aGF0IHByb2R1Y2VkIGJ5IHRoZSBkZWZhdWx0IGRlYnVnIGFjdGlvbnMgLSBjdXN0b20gZGVidWcgYWN0aW9ucyBjYW4gYmUKICAgICAgICBzcGVjaWZpZWQgdXNpbmcgOmNsYXNzOmBzZXREZWJ1Z0FjdGlvbnNgLiBQcmlvciB0byBhdHRlbXB0aW5nCiAgICAgICAgdG8gbWF0Y2ggdGhlIGBgd2RgYCBleHByZXNzaW9uLCB0aGUgZGVidWdnaW5nIG1lc3NhZ2UgYGAiTWF0Y2ggPGV4cHJuYW1l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kAFuFAQAdBtrCpABcuIBAH0UAQB6JnwQahFkDnQEfBSDARcAgwEBAHwMkAFvzHwGfQx8FH0RVwBZAGQBZAF9FH4UWABu0lgAfAyQAW/ufAYMAH0MfAdkAWsJkAJyonlSfAd8D3wRgwJ9FXwVZAFrCZACcjx0AHwVdByDApACcix8EGoRfBVqHYMAgwEBAG4OfBBqEXQEfBWDAYMBAQBuDnwQahF8EWodgwCDAQEAVwBuUgQAdBtrCpACcp4BAH0WAQB6NHwQahF8EWodfARkD40BgwEBAHwQahFkEGoefAdqH3QgfBaDAWoffBaDA4MBAQBXAFkAZAFkAX0WfhZYAG4CWABuEnwQahF8EWodfARkD40BgwEBAHwFkAJy2HwEkAJyynwQahFkB4MBAQB8CWQEahJ8EIMBgwEBAHwKahF8D3wRZgKDAQEAcXhXAHwMfApmAlMAKRFhcw0AAAogICAgICAgIEV4ZWN1dGUgdGhlIHBhcnNlIGV4cHJlc3Npb24gb24gYSBzZXJpZXMgb2YgdGVzdCBzdHJpbmdzLCBzaG93aW5nIGVhY2gKICAgICAgICB0ZXN0LCB0aGUgcGFyc2VkIHJlc3VsdHMgb3Igd2hlcmUgdGhlIHBhcnNlIGZhaWxlZC4gUXVpY2sgYW5kIGVhc3kgd2F5IHRvCiAgICAgICAgcnVuIGEgcGFyc2UgZXhwcmVzc2lvbiBhZ2FpbnN0IGEgbGlzdCBvZiBzYW1wbGUgc3RyaW5ncy4KCiAgICAgICAgUGFyYW1ldGVyczoKICAgICAgICAgLSB0ZXN0cyAtIGEgbGlzdCBvZiBzZXBhcmF0ZSB0ZXN0IHN0cmluZ3MsIG9yIGEgbXVsdGlsaW5lIHN0cmluZyBvZiB0ZXN0IHN0cmluZ3MKICAgICAgICAgLSBwYXJzZUFsbCAtIChkZWZhdWx0PSBgYFRydWVgYCkgLSBmbGFnIHRvIHBhc3MgdG8gOmNsYXNzOmBwYXJzZVN0cmluZ2Agd2hlbiBydW5uaW5nIHRlc3RzCiAgICAgICAgIC0gY29tbWVudCAtIChkZWZhdWx0PSBgYCcjJ2BgKSAtIGV4cHJlc3Npb24gZm9yIGluZGljYXRpbmcgZW1iZWRkZWQgY29tbWVudHMgaW4gdGhlIHRlc3QKICAgICAgICAgICAgICBzdHJpbmc7IHBhc3MgTm9uZSB0byBkaXNhYmxlIGNvbW1lbnQgZmlsdGVyaW5nCiAgICAgICAgIC0gZnVsbER1bXAgLSAoZGVmYXVsdD0gYGBUcnVlYGApIC0gZHVtcCByZXN1bHRzIGFzIGxpc3QgZm9sbG93ZWQgYnkgcmVzdWx0cyBuYW1lcyBpbiBuZXN0ZWQgb3V0bGluZTsKICAgICAgICAgICAgICBpZiBGYWxzZSwgb25seSBkdW1wIG5lc3RlZCBsaXN0CiAgICAgICAgIC0gcHJpbnRSZXN1bHRzIC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSBwcmludHMgdGVzdCBvdXRwdXQgdG8gc3Rkb3V0CiAgICAgICAgIC0gZmFpbHVyZVRlc3RzIC0gKGRlZmF1bHQ9IGBgRmFsc2VgYCkgaW5kaWNhdGVzIGlmIHRoZXNlIHRlc3RzIGFyZSBleHBlY3RlZCB0byBmYWlsIHBhcnNpbmcKICAgICAgICAgLSBwb3N0UGFyc2UgLSAoZGVmYXVsdD0gYGBOb25lYGApIG9wdGlvbmFsIGNhbGxiYWNrIGZvciBzdWNjZXNzZnVsIHBhcnNlIHJlc3VsdHM7IGNhbGxlZCBhcwogICAgICAgICAgICAgIGBmbih0ZXN0X3N0cmluZywgcGFyc2VfcmVzdWx0cylgIGFuZCByZXR1cm5zIGEgc3RyaW5nIHRvIGJlIGFkZGVkIHRvIHRoZSB0ZXN0IG91dHB1dAogICAgICAgICAtIGZpbGUgLSAoZGVmYXVsdD1gYE5vbmVgYCkgb3B0aW9uYWwgZmlsZS1saWtlIG9iamVjdCB0byB3aGljaCB0ZXN0IG91dHB1dCB3aWxsIGJlIHdyaXR0ZW47CiAgICAgICAgICAgICAgaWYgTm9uZSwgd2lsbCBkZWZhdWx0IHRvIGBgc3lzLnN0ZG91dGBgCgogICAgICAgIFJldHVybnM6IGEgKHN1Y2Nlc3MsIHJlc3VsdHMpIHR1cGxlLCB3aGVyZSBzdWNjZXNzIGluZGljYXRlcyB0aGF0IGFsbCB0ZXN0cyBzdWNjZWVkZWQKICAgICAgICAob3IgZmFpbGVkIGlmIGBgZmFpbHVyZVRlc3RzYGAgaXMgVHJ1ZSksIGFuZCB0aGUgcmVzdWx0cyBjb250YWluIGEgbGlzdCBvZiBsaW5lcyBvZiBlYWNoCiAgICAgICAgdGVzdCdzIG91dHB1dAoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIG51bWJlcl9leHByID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIuY29weSgpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAgICAgMTAwCiAgICAgICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAgICAgJycnKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgJy4nCiAgICAgICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgJycnLCBmYWlsdXJlVGVzdHM9VHJ1ZSkKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAxMDAKICAgICAgICAgICAgWzEwMF0KCiAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgIFstMTAwXQoKICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgIFsxZS0xMl0KCiAgICAgICAgICAgIFN1Y2Nlc3MKCiAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciAzKSwgKGxpbmU6MSwgY29sOjQpCgogICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQge3JlYWwgbnVtYmVyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbiB8IHJlYWwgbnVtYmVyIHwgc2lnbmVkIGludGVnZXJ9IChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgICAgICMgdG9vIG1hbnkgJy4nCiAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDQpLCAobGluZToxLCBjb2w6NSkKCiAgICAgICAgICAgIFN1Y2Nlc3MKCiAgICAgICAgRWFjaCB0ZXN0IHN0cmluZyBtdXN0IGJlIG9uIGEgc2luZ2xlIGxpbmUuIElmIHlvdSB3YW50IHRvIHRlc3QgYSBzdHJpbmcgdGhhdCBzcGFucyBtdWx0aXBsZQogICAgICAgIGxpbmVzLCBjcmVhdGUg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ZXMsCiAgICB0aGF0IGlzLCBzdHJpbmdzIHdpdGggYXQgbW9zdCAnbicgbWlzbWF0Y2hpbmcgY2hhcmFjdGVycy4KICAgIDpjbGFzczpgQ2xvc2VNYXRjaGAgdGFrZXMgcGFyYW1ldGVyczoKCiAgICAgLSBgYG1hdGNoX3N0cmluZ2BgIC0gc3RyaW5nIHRvIGJlIG1hdGNoZWQKICAgICAtIGBgbWF4TWlzbWF0Y2hlc2BgIC0gKGBgZGVmYXVsdD0xYGApIG1heGltdW0gbnVtYmVyIG9mCiAgICAgICBtaXNtYXRjaGVzIGFsbG93ZWQgdG8gY291bnQgYXMgYSBtYXRjaAoKICAgIFRoZSByZXN1bHRzIGZyb20gYSBzdWNjZXNzZnVsIHBhcnNlIHdpbGwgY29udGFpbiB0aGUgbWF0Y2hlZCB0ZXh0CiAgICBmcm9tIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBmb2xsb3dpbmcgbmFtZWQgcmVzdWx0czoKCiAgICAgLSBgYG1pc21hdGNoZXNgYCAtIGEgbGlzdCBvZiB0aGUgcG9zaXRpb25zIHdpdGhpbiB0aGUKICAgICAgIG1hdGNoX3N0cmluZyB3aGVyZSBtaXNtYXRjaGVzIHdlcmUgZm91bmQKICAgICAtIGBgb3JpZ2luYWxgYCAtIHRoZSBvcmlnaW5hbCBtYXRjaF9zdHJpbmcgdXNlZCB0byBjb21wYXJlCiAgICAgICBhZ2FpbnN0IHRoZSBpbnB1dCBzdHJpbmcKCiAgICBJZiBgYG1pc21hdGNoZXNgYCBpcyBhbiBlbXB0eSBsaXN0LCB0aGVuIHRoZSBtYXRjaCB3YXMgYW4gZXhhY3QKICAgIG1hdGNoLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIpCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVRDR0FBWEdHQSIpICMgLT4gKFsnQVRDQVRDR0FBWEdHQSddLCB7J21pc21hdGNoZXMnOiBbWzldXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FYQ0dBQVhHR0EiKSAj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IHZhbHVlIDwgMSBpcyBub3QgdmFsaWQpOyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yCiAgICBgYG1heGBgIGFuZCBgYGV4YWN0YGAgYXJlIDAsIG1lYW5pbmcgbm8gbWF4aW11bSBvciBleGFjdAogICAgbGVuZ3RoIHJlc3RyaWN0aW9uLiBBbiBvcHRpb25hbCBgYGV4Y2x1ZGVDaGFyc2BgIHBhcmFtZXRlciBjYW4KICAgIGxpc3QgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIGZvdW5kIGluIHRoZSBpbnB1dCBgYGJvZHlDaGFyc2BgCiAgICBzdHJpbmc7IHVzZWZ1bCB0byBkZWZpbmUgYSB3b3JkIG9mIGFsbCBwcmludGFibGVzIGV4Y2VwdCBmb3Igb25lIG9yCiAgICB0d28gY2hhcmFjdGVycywgZm9yIGluc3RhbmNlLgoKICAgIDpjbGFzczpgc3JhbmdlYCBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MKICAgIGZvciBkZWZpbmluZyBgYFdvcmRgYCBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbQogICAgcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlciBzZXRzLgoKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIDpjbGFzczpgV29yZGAgdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsCiAgICBzdHJpbmcsIGFzIGluIGBgV29yZCgiQWRkcmVzcyIpYGAuIFJlbWVtYmVyIHRoYXQgOmNsYXNzOmBXb3JkYAogICAgdXNlcyB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGRlZmluZSAqc2V0cyogb2YgbWF0Y2hhYmxlIGNoYXJhY3RlcnMuCiAgICBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLCAiZEFyZWQiLCBvciBhbnkgb3RoZXIgd29yZAogICAgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuIFRvIG1hdGNoIGFuCiAgICBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIDpjbGFzczpgTGl0ZXJhbGAgb3IgOmNsYXNzOmBLZXl3b3JkYC4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgoKICAgICAtIDpjbGFzczpgYWxwaGFzYAogICAgIC0gOmNsYXNzOmBudW1zYAogICAgIC0gOmNsYXNzOmBhbHBoYW51bXNgCiAgICAgLSA6Y2xhc3M6YGhleG51bXNgCiAgICAgLSA6Y2xhc3M6YGFscGhhczhiaXRgIChhbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NQogICAgICAgLSBhY2NlbnRlZCwgdGlsZGVkLCB1bWxhdXRlZCwgZXRjLikKICAgICAtIDpjbGFzczpgcHVuYzhiaXRgIChub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlCiAgICAgICAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0gOmNsYXNzOmBwcmludGFibGVzYCAoYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcikKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyBhIHdvcmQgY29tcG9zZWQgb2YgZGlnaXRzCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykgIyBlcXVpdmFsZW50IHRvIFdvcmQoIjAxMjM0NTY3ODkiKSBvciBXb3JkKHNyYW5nZSgiMC05IikpCgogICAgICAgICMgYSB3b3JkIHdpdGggYSBsZWFkaW5nIGNhcGl0YWwsIGFuZCB6ZXJvIG9yIG1vcmUgbG93ZXJjYXNlCiAgICAgICAgY2FwaXRhbF93b3JkID0gV29yZChhbHBoYXMudXBwZXIoKSwgYWxwaGFzLmxvd2VyKCkpCgogICAgICAgICMgaG9zdG5hbWVzIGFyZSBhbHBoYW51bWVyaWMsIHdpdGggbGVhZGluZyBhbHBoYSwgYW5kICctJwogICAgICAgIGhvc3RuYW1lID0gV29yZChhbHBoYXMsIGFscGhhbnVtcyArICctJykK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AWQAWgJkAVoDZBGHAGYBZARkBYQJWgRkEmQHZAiEAVoFZBNkCWQKhAFaBmQUZAtkDIQBWgeHAGYBZA1kDoQIWghkD2QQhABaCYcABABaClMAKRVyRAAAAGFoBAAAVG9rZW4gZm9yIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBtYXRjaCBhIGdpdmVuIHJlZ3VsYXIKICAgIGV4cHJlc3Npb24uIERlZmluZWQgd2l0aCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGluCiAgICBhIGZvcm0gcmVjb2duaXplZCBieSB0aGUgc3RkbGliIFB5dGhvbiAgYHJlIG1vZHVsZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWw+YF8uCiAgICBJZiB0aGUgZ2l2ZW4gcmVnZXggY29udGFpbnMgbmFtZWQgZ3JvdXBzIChkZWZpbmVkIHVzaW5nIGBgKD9QPG5hbWU+Li4uKWBgKSwKICAgIHRoZXNlIHdpbGwgYmUgcHJlc2VydmVkIGFzIG5hbWVkIHBhcnNlIHJlc3VsdHMuCgogICAgSWYgaW5zdGVhZCBvZiB0aGUgUHl0aG9uIHN0ZGxpYiByZSBtb2R1bGUgeW91IHdpc2ggdG8gdXNlIGEgZGlmZmVyZW50IFJFIG1vZHVsZQogICAgKHN1Y2ggYXMgdGhlIGByZWdleGAgbW9kdWxlKSwgeW91IGNhbiByZXBsYWNlIGl0IGJ5IGVpdGhlciBidWlsZGluZyB5b3VyCiAgICBSZWdleCBvYmplY3Qgd2l0aCBhIGNvbXBpbGVkIFJFIHRoYXQgd2FzIGNvbXBpbGVkIHVzaW5nIHJlZ2V4OgoKICAgIEV4YW1wbGU6OgoKICAgICAgICByZWFsbnVtID0gUmVnZXgociJbKy1dP1xkK1wuXGQqIikKICAgICAgICBkYXRlID0gUmVnZXgocicoP1A8eWVhcj5cZHs0fSktKD9QPG1vbnRoPlxkXGQ/KS0oP1A8ZGF5PlxkXGQ/KScpCiAgICAgICAgIyByZWY6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI2NzM5OS9ob3ctZG8teW91LW1hdGNoLW9ubHktdmFsaWQt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AABhJgYAAAogICAgVG9rZW4gZm9yIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBhcmUgZGVsaW1pdGVkIGJ5IHF1b3RpbmcgY2hhcmFjdGVycy4KCiAgICBEZWZpbmVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgoKICAgICAgICAtIHF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZQogICAgICAgICAgcXVvdGUgZGVsaW1pdGluZyBzdHJpbmcKICAgICAgICAtIGVzY0NoYXIgLSBjaGFyYWN0ZXIgdG8gZXNjYXBlIHF1b3RlcywgdHlwaWNhbGx5IGJhY2tzbGFzaAogICAgICAgICAgKGRlZmF1bHQ9IGBgTm9uZWBgKQogICAgICAgIC0gZXNjUXVvdGUgLSBzcGVjaWFsIHF1b3RlIHNlcXVlbmNlIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCBxdW90ZQogICAgICAgICAgc3RyaW5nIChzdWNoIGFzIFNRTCdzIGBgIiJgYCB0byBlc2NhcGUgYW4gZW1iZWRkZWQgYGAiYGApCiAgICAgICAgICAoZGVmYXVsdD0gYGBOb25lYGApCiAgICAgICAgLSBtdWx0aWxpbmUgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBxdW90ZXMgY2FuIHNwYW4KICAgICAgICAgIG11bHRpcGxlIGxpbmVzIChkZWZhdWx0PSBgYEZhbHNlYGApCiAgICAgICAgLSB1bnF1b3RlUmVzdWx0cyAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXRjaGVkIHRleHQKICAgICAgICAgIHNob3VsZCBiZSB1bnF1b3RlZCAoZGVmYXVsdD0gYGBUcnVlYGApCiAgICAgICAgLSBlbmRRdW90ZUNoYXIgLSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycyBkZWZpbmluZyB0aGUKICAgICAgICAgIGVuZCBvZiB0aGUgcXVvdGUgZGVsaW1pdGVkIHN0cmluZyAoZGVmYXVsdD0gYGBOb25lYGAgID0+IHNhbWUgYXMKICAgICAgICAgIHF1b3RlQ2hhcikKICAgICAg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dGhlIGBgJyYnYGAgb3BlcmF0b3IuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGNvbG9yID0gb25lT2YoIlJFRCBPUkFOR0UgWUVMTE9XIEdSRUVOIEJMVUUgUFVSUExFIEJMQUNLIFdISVRFIEJST1dOIikKICAgICAgICBzaGFwZV90eXBlID0gb25lT2YoIlNRVUFSRSBDSVJDTEUgVFJJQU5HTEUgU1RBUiBIRVhBR09OIE9DVEFHT04iKQogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgc2hhcGVfYXR0ciA9ICJzaGFwZToiICsgc2hhcGVfdHlwZSgic2hhcGUiKQogICAgICAgIHBvc25fYXR0ciA9ICJwb3NuOiIgKyBHcm91cChpbnRlZ2VyKCJ4IikgKyAnLCcgKyBpbnRlZ2VyKCJ5IikpKCJwb3NuIikKICAgICAgICBjb2xvcl9hdHRyID0gImNvbG9yOiIgKyBjb2xvcigiY29sb3IiKQogICAgICAgIHNpemVfYXR0ciA9ICJzaXplOiIgKyBpbnRlZ2VyKCJzaXplIikKCiAgICAgICAgIyB1c2UgRWFjaCAodXNpbmcgb3BlcmF0b3IgJyYnKSB0byBhY2NlcHQgYXR0cmlidXRlcyBpbiBhbnkgb3JkZXIKICAgICAgICAjIChzaGFwZSBhbmQgcG9zbiBhcmUgcmVxdWlyZWQsIGNvbG9yIGFuZCBzaXplIGFyZSBvcHRpb25hbCkKICAgICAgICBzaGFwZV9zcGVjID0gc2hhcGVfYXR0ciAmIHBvc25fYXR0ciAmIE9wdGlvbmFsKGNvbG9yX2F0dHIpICYgT3B0aW9uYWwoc2l6ZV9hdHRyKQoKICAgICAgICBzaGFwZV9zcGVjLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgICAgIGNvbG9yOkdSRUVOIHNpemU6MjAgc2hhcGU6VFJJQU5HTEUgcG9zbjoyMCw0MAogICAgICAgICAgICAnJycKICAgICAgICAgICAgKQoKICAgIHByaW50czo6CgogICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgWydzaGFwZTonLCAnU1FVQVJFJywgJ2NvbG9yOicsICdCTEFDSycsICdwb3NuOicsIFsnMTAwJywgJywnLCAnMTIwJ11dCiAgICAgICAgLSBjb2xvcjogQkxBQ0sKICAgICAgICAtIHBvc246IFsnMTAwJywgJywnLCAnMTIwJ10KICAgICAgICAgIC0geDogMTAwCiAgICAgICAgICAtIHk6IDEyMAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQoKCiAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgIFsnc2hhcGU6JywgJ0NJUkNMRScsICdzaXplOicsICc1MCcsICdjb2xvcjonLCAnQkxVRScsICdwb3NuOicsIFsnNTAnLCAnLCcsICc4MCddXQogICAgICAgIC0gY29sb3I6IEJMVUUKICAgICAgICAtIHBvc246IFsnNTAnLCAnLCcsICc4MCddCiAgICAgICAgICAtIHg6IDUwCiAgICAgICAgICAtIHk6IDgwCiAgICAgICAgLSBzaGFwZTogQ0lSQ0xFCiAgICAgICAgLSBzaXplOiA1MAoKCiAgICAgICAgY29sb3I6IEdSRUVOIHNpemU6IDIwIHNoYXBlOiBUUklBTkdMRSBwb3NuOiAyMCw0MAogICAgICAgIFsnY29sb3I6JywgJ0dSRUVOJywgJ3NpemU6JywgJzIwJywgJ3NoYXBlOicsICdUUklBTkdMRScsICdwb3NuOicsIFsnMjAnLCAnLCcsICc0MCddXQogICAgICAgIC0gY29sb3I6IEdSRUVOCiAgICAgICAgLSBwb3NuOiBbJzIwJywgJywnLCAnNDAnXQogICAgICAgICAgLSB4OiAyMAogICAgICAgICAgLSB5OiA0MAogICAgICAgIC0gc2hhcGU6IFRSSUFOR0xFCiAgICAgICAgLSBzaXplOiAyMAogICAgVGMDAAAAAAAAAAMAAAADAAAAAwAAAHM+AAAAdAB0AXwAgwJqAnwBfAKDAgEAdANk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ICAgcmV0dXJucyBhIG51bGwgdG9rZW4gbGlzdCwgYnV0IGlmIGEgcmVzdWx0cyBuYW1lIGlzIGRlZmluZWQgb24gdGhlCiAgICBnaXZlbiBleHByZXNzaW9uLCBpdCBpcyByZXR1cm5lZC4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICAtIGV4cHIgLSBleHByZXNzaW9uIHRoYXQgbXVzdCBtYXRjaCBwcmlvciB0byB0aGUgY3VycmVudCBwYXJzZQogICAgICAgbG9jYXRpb24KICAgICAtIHJldHJlYXQgLSAoZGVmYXVsdD0gYGBOb25lYGApIC0gKGludCkgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgICAgdG8gbG9va2JlaGluZCBwcmlvciB0byB0aGUgY3VycmVudCBwYXJzZSBsb2NhdGlvbgoKICAgIElmIHRoZSBsb29rYmVoaW5kIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcsIExpdGVyYWwsIEtleXdvcmQsIG9yCiAgICBhIFdvcmQgb3IgQ2hhcnNOb3RJbiB3aXRoIGEgc3BlY2lmaWVkIGV4YWN0IG9yIG1heGltdW0gbGVuZ3RoLCB0aGVuCiAgICB0aGUgcmV0cmVhdCBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkLiBPdGhlcndpc2UsIHJldHJlYXQgbXVzdCBiZQogICAgc3BlY2lmaWVkIHRvIGdpdmUgYSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGxvb2sgYmFjayBmcm9tCiAgICB0aGUgY3VycmVudCBwYXJzZSBwb3NpdGlvbiBmb3IgYSBsb29rYmVoaW5kIG1hdGNoLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICAjIFZCLXN0eWxlIHZhcmlhYmxlIG5hbWVzIHdpdGggdHlwZSBwcmVmaXhlcwogICAgICAgIGludF92YXIgPSBQcmVjZWRlZEJ5KCIjIikgKyBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIKICAgICAgICBzdHJfdmFyID0gUHJlY2VkZWRCeSgiJCIpICsgcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgTmMDAAAAAAAAAAMAAAAEAAAAAwAAAHPOAAAAdAB0AXwAgwJqAnwBgwEBAHwAagODAGoEgwB8AF8DZAF8AF8FZAJ8AF8GZAJ8AF8HdAh8AXQJgwJySnQKfAGDAX0CZAF8AF8HblZ0CHwBdAt0DGYCgwJyZnwBag19AmQBfABfB246dAh8AXQOdA9mAoMCcox8AWoQdBFrA3KMfAFqEH0CZAF8AF8HbhR0CHwBdBKDAnKgZAN9AmQBfABfB3wCfABfE2QEdAl8AYMBFwB8AF8UZAJ8AF8VfABqFmoXZAVkBoQAgwEBAGQAUwApB05URnIBAAAAehBub3QgcHJlY2VkZWQgYnkgYwMAAAAAAAAAAwAAAAQAAABTAAAAcxAAAAB8AmoAdAFkAGQAgwKDAVMAKQFOKQJyLQEAAHIeAQAAKQNyqgAAAHK7AAAAcpgAAAByEgAAAHISAAAAchMAAABymQAAAPkRAABzAAAAAHolUHJlY2VkZWRCeS5fX2luaXRfXy48bG9jYWxzPi48bGFtYmRhPikYcnACAAByMgAAAHLJAAAAco8BAAByQQIAAHK9AQAAcsIBAABynQIAAHKaAAAAcpwAAABy0gAAAHIxAAAAci4AAABydgIAAHJMAAAAciUAAABykwIAAHJvAgAAcs8CAADaB3JldHJlYXRywwEAAHK6AQAAcrUBAABy7AAAACkDcscAAAByjwEAAHL6AgAAKQFyqAEAAHISAAAAchMAAAByyQAAAOQRAABzKgAAAAABEAEOAQYBBgEGAQoBCAEIAQ4BBgEIARgBBgEIAQoBBAEGAQYBDgEGAXoTUHJlY2VkZWRCeS5fX2luaXRfX3IBAAAAVGMEAAAAAAAAAAwAAAARAAAAQwAAAHPkAAAAfABqAHI8fAJ8AGoBawByHnQCfAF8AnwAagODA4IBfAJ8AGoBGAB9BHwAagRqBXwBfASDAlwCfQV9Bm6gfABqBHQGgwAXAH0HfAF0B2QBfAJ8AGoBGACDAnwChQIZAH0IdAJ8AXwCfABqA4MDfQl4bHQIZAJ0CXwCfABqAWQCFwCDAmQCFwCDAkQAXUp9CnkcfAdqBXwIdAp8CIMBfAoYAIMCXAJ9BX0GVwBuJgQAdAtrCnLQAQB9CwEAegp8C30JVwBZAGQAZAB9C34LWABxilgAUABxilcAfAmCAXwCfAZmAlMAKQNOcgEAAABylAAAACkMcp0CAABy+gIAAHI8AAAAcsMBAAByjwEAAHLaAQAAckYAAABynAIAAHIjAQAAcpsCAABy0gAAAHI6AAAAKQxyxwAAAHKOAQAAcsMAAABy1QEAAHKFAgAAcvkCAABypAAAAFoJdGVzdF9leHByWg5pbnN0cmluZ19zbGljZVoJbGFzdF9leHByclABAABaA3BiZXISAAAAchIAAAByEwAAAHLlAAAA+xEAAHMgAAAAAAEGAQoBDgEKARQDDAEYAQ4BIAECAhwBEAEWAgYCBAF6FFByZWNlZGVkQnkucGFyc2VJbXBsKQFOKQJyAQAAAFQpB3IPAAAAchAAAAByEQAAAHLfAAAAcskAAABy5QAAAHJ0AgAAchIAAAByEgAAACkBcqgBAAByEwAAAHIyAAAAyBEAAHMGAAAACBsEAQ4XYwAAAAAAAAAAAAAAAAMAAAAAAAAAczIAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgRkCWQFZAaEAVoFZAdkCIQAWgaHAAQAWgdTACkKcjUAAABhuQMAAExvb2thaGVhZCB0byBkaXNhbGxvdyBtYXRjaGluZyB3aXRoIHRoZSBnaXZlbiBwYXJzZSBleHByZXNzaW9uLgogICAgYGBOb3RBbnlgYCBkb2VzICpub3QqIGFkdmFuY2UgdGhlIHBhcnNpbmcgcG9zaXRpb24gd2l0aGluIHRoZQogICAgaW5wdXQgc3RyaW5nLCBpdCBvbmx5IHZlcmlmaWVzIHRoYXQgdGhlIHNwZWNpZmllZCBwYXJzZSBleHByZXNzaW9uCiAgICBkb2VzICpub3QqIG1hdGNoIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLiAgQWxzbywgYGBOb3RBbnlgYCBkb2VzCiAgICAqbm90KiBza2lwIG92ZXIgbGVhZGluZyB3aGl0ZXNwYWNlLiBgYE5vdEFueWBgIGFsd2F5cyByZXR1cm5zCiAgICBhIG51bGwgdG9rZW4gbGlzdC4gIE1heSBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgJ34nIG9wZXJhdG9yLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBBTkQsIE9SLCBOT1QgPSBtYXAoQ2FzZWxlc3NLZXl3b3JkLCAiQU5EIE9SIE5PVCIuc3BsaXQoKSkKCiAgICAgICAgIyB0YWtlIGNhcmUgbm90IHRvIG1pc3Rha2Uga2V5d29yZHMgZm9yIGlkZW50aWZpZXJzCiAgICAgICAgaWRlbnQgPSB+KEFORCB8IE9SIHwgTk9UKSArIFdvcmQoYWxwaGFzKQogICAgICAgIGJvb2xlYW5fdGVybSA9IE9wdGlvbmFsKE5PVCkgKyBpZGVudAoKICAgICAgICAjIHZlcnkgY3J1ZGUgYm9vbGVhbiBleHByZXNzaW9uIC0gdG8gc3VwcG9ydCBwYXJlbnRoZXNpcyBncm91cHMgYW5kCiAgICAgICAgIyBvcGVyYXRpb24gaGllcmFyY2h5LCB1c2UgaW5maXhOb3RhdGlvbgogICAgICAgIGJvb2xlYW5fZXhwciA9IGJvb2xlYW5fdGVybSArIFplcm9Pck1vcmUoKEFORCB8IE9SKSArIGJvb2xlYW5fdGVybSkKCiAgICAgICAgIyBpbnRlZ2VycyB0aGF0IGFyZSBmb2xsb3dlZCBieSAiLiIgYXJlIGFjdHVhbGx5IGZsb2F0cwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpICsgfkNoYXIoIi4iKQogICAgYwIAAAAAAAAAAgAAAAMAAAADAAAAczAAAAB0AHQBfACDAmoCfAGDAQEAZAF8AF8DZAJ8AF8EZAN0BXwAagaDARcAfABfB2QAUwApBE5GVHoWRm91bmQgdW53YW50ZWQgdG9rZW4sICkIcnACAAByNQAAAHLJAAAAcroBAAByvQEAAHKlAAAAco8BAABywwEAACkCcscAAAByjwEAACkBcqgBAAByEgAAAHITAAAAcskAAAAqEgAAcwgAAAAAARACBgEGAXoPTm90QW55Ll9faW5pdF9fVGMEAAAAAAAAAAQAAAAFAAAAQwAAAHMmAAAAfABqAGoBfAF8AoMCch50AnwBfAJ8AGoDfACDBIIBfAJnAGYCUwApAU4pBHKPAQAAcvUBAAByPAAAAHLDAQAAKQRyxwAAAHKOAQAAcsMAAABy1QEAAHISAAAAchIAAAByEwAAAHLlAAAAMRIAAHMGAAAAAAEOARABehBOb3RBbnkucGFyc2VJbXBsYwEAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROcgsBAAB6An57ct0CAAApBXI1AQAAcgsBAABytwEAAHKlAAAAco8BAAApAXLHAAAAchIAAAByEgAAAHITAAAActMAAAA2EgAAcwoAAAAAAQoBBgIKARQCeg5Ob3RBbnkuX19zdHJfXykBVCkIcg8AAAByEAAAAHIRAAAAct8AAAByyQAAAHLlAAAActMAAABydAIAAHISAAAAchIAAAApAXKoAQAAchMAAAByNQAAABMSAABzCAAAAAgWBAEMBwoFYwAAAAAAAAAAAAAAAAQAAAAAAAAAcz4AAABlAFoBZABaAmQMhwBmAWQCZAOECVoDZARkBYQAWgRkDWQHZAiEAVoFZA6HAGYBZApkC4QJWgaHAAQAWgdTACkP2g5fTXVsdGlwbGVNYXRjaE5jAwAAAAAAAAAEAAAAAwAAAAMAAABzPAAAAHQAdAF8AIMCagJ8AYMBAQBkAXwAXwN8An0DdAR8A3QFgwJyLnwAagZ8A4MBfQN8AGoHfAODAQEAZABTACkCTlQpCHJwAgAAcvsCAAByyQAAAHK5AQAAcpoAAAByGQEAAHKxAQAA2gZzdG9wT24pBHLHAAAAco8BAABy/AIAANoFZW5kZXIpAXKoAQAAchIAAAByEwAAAHLJAAAAQBIAAHMMAAAAAAEQAQYBBAEKAQoBehdfTXVsdGlwbGVNYXRjaC5fX2luaXRfX2MCAAAAAAAAAAIAAAADAAAAQwAAAHMsAAAAdAB8AXQBgwJyFHwAagJ8AYMBfQF8AWQAawlyInwBDwBuAmQAfABfA3wAUwApAU4pBHKaAAAAchkBAABysQEAANoJbm90X2VuZGVyKQJyxwAAAHL9AgAAchIAAAByEgAAAHITAAAAcvwCAABIEgAAcwgAAAAAAQoBCgEUAXoVX011bHRpcGxlTWF0Y2guc3RvcE9uVGMEAAAAAAAAAAwAAAAMAAAAQwAAAHPCAAAAfABqAGoBfQR8AGoCfQV8AGoDZABrCX0GfAZyJHwAagNqBH0HfAZyMnwHfAF8AoMCAQB8BHwBfAJ8A2QBZAKNBFwCfQJ9CHlafABqBQwADAB9CXhKfAZyYnwHfAF8AoMCAQB8CXJyfAV8AXwCgwJ9Cm4EfAJ9CnwEfAF8CnwDgwNcAn0CfQt8C3OSfAtqBoMAclR8CHwLNwB9CHFUVwBXAG4YBAB0B3QIZgJrCnK4AQABAAEAWQBuAlgAfAJ8CGYCUwApA05GKQFy1gEAACkJco8BAABy2gEAAHLnAQAAcv4CAABy9AEAAHK/AQAAcj0BAAByPAAAAHIcAQAAKQxyxwAAAHKOAQAAcsMAAABy1QEAANoPc2VsZl9leHByX3BhcnNl2hRzZWxmX3NraXBfaWdub3JhYmxlc9oLY2hlY2tfZW5kZXLaDXRyeV9ub3RfZW5kZXJy8QEAANoOaGFzSWdub3JlRXhwcnNy7wEAANoJdG1wdG9rZW5zchIAAAByEgAAAHITAAAAcuUAAABOEgAAcywAAAAAAQgBBgEKAQQBCAQEAQoBFAECAQoBAgEEAQoBBAEMAgQBEAEMARABEgEGAnoYX011bHRpcGxlTWF0Y2gucGFyc2VJbXBsRmMDAAAAAAAAAAQAAAAHAAAAAwAAAHNqAAAAdABqAXJYeFB8AGoCZwF0A3wAagJkAWcAgwMXAEQAXTZ9A3QEfAN0BYMCch58A2oGch50B2oIZAJqCWQDfAF0CnwAgwFqC3wDagaDBGQEZAWNAgEAcR5XAHQMdA18AIMCag58AXwCgwJTACkGTnLVAgAAel17MH06IHNldHRpbmcgcmVzdWx0cyBuYW1lIHsxIXJ9IG9uIHsyfSBleHByZXNzaW9uIGNvbGxpZGVzIHdpdGggezMhcn0gb24gY29udGFpbmVkIGV4cHJlc3Npb25yGgAAAHKRAAAAKQFyJgIAACkPchgAAAByGgAAAHKPAQAAcqoBAABymgAAAHJBAAAAcrgBAAByKQIAAHIqAgAAcu0AAABy3QAAAHIPAAAAcnACAABy+wIAAHLNAQAAKQRyxwAAAHILAQAAcs4BAABy5QEAACkBcqgBAAByEgAAAHITAAAAcs0BAABrEgAAcxQAAAAAAQYBHAEQAQgBAgECAQgBBgEMAnoeX011bHRpcGxlTWF0Y2guX3NldFJlc3VsdHNOYW1lKQFOKQFUKQFGKQhyDwAAAHIQAAAAchEAAAByyQAAAHL8AgAAcuUAAAByzQEAAHJ0AgAAchIAAAByEgAAACkBcqgBAAByEwAAAHL7AgAAPxIAAHMIAAAACAEOCAgGCh1y+wIAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBFMAKQVyNgAAAGFqBAAAUmVwZXRpdGlvbiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbi4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIG9uZSBvciBtb3JlIHRpbWVzCiAgICAgLSBzdG9wT24gLSAoZGVmYXVsdD0gYGBOb25lYGApIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24KICAgICAgICAgIGV4cHJlc3Npb24pCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGFfd29yZCA9IFdvcmQoYWxwaGFzKQogICAgICAgIGxhYmVsID0gZGF0YV93b3JkICsgRm9sbG93ZWRCeSgnOicpCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogQkxBQ0siCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkucHByaW50KCkgICMgRmFpbCEgcmVhZCAnY29sb3InIGFzIGRhdGEgaW5zdGVhZCBvZiBuZXh0IGxhYmVsIC0+IFtbJ3NoYXBlJywgJ1NRVUFSRSBjb2xvciddXQoKICAgICAgICAjIHVzZSBzdG9wT24gYXR0cmlidXRlIGZvciBPbmVPck1vcmUgdG8gYXZvaWQgcmVhZGluZyBsYWJlbCBzdHJpbmcgYXMgcGFydCBvZiB0aGUgZGF0YQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rp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cGxlOjoKCiAgICAgICAgcmVwb3J0ID0gJycnCiAgICAgICAgICAgIE91dHN0YW5kaW5nIElzc3VlcyBSZXBvcnQgLSAxIEphbiAyMDAwCgogICAgICAgICAgICAgICAjIHwgU2V2ZXJpdHkgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEYXlzIE9wZW4KICAgICAgICAgICAgLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCiAgICAgICAgICAgICAxMDEgfCBDcml0aWNhbCB8IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2ggICAgICAgICAgICAgICAgIHwgICAgICAgICAgNgogICAgICAgICAgICAgIDk0IHwgQ29zbWV0aWMgfCBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykgICAgICAgICB8ICAgICAgICAgMTQKICAgICAgICAgICAgICA3OSB8IE1pbm9yICAgIHwgU3lzdGVtIHNsb3cgd2hlbiBydW5uaW5nIHRvbyBtYW55IHJlcG9ydHMgfCAgICAgICAgIDQ3CiAgICAgICAgICAgICcnJwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgU0VQID0gU3VwcHJlc3MoJ3wnKQogICAgICAgICMgdXNlIFNraXBUbyB0byBzaW1wbHkgbWF0Y2ggZXZlcnl0aGluZyB1cCB1bnRpbCB0aGUgbmV4dCBTRVAKICAgICAgICAjIC0gaWdub3JlIHF1b3RlZCBzdHJpbmdzLCBzbyB0aGF0IGEgJ3wnIGNoYXJhY3RlciBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nIGRvZXMgbm90IG1hdGNoCiAgICAgICAgIyAtIHBhcnNlIGFjdGlvbiB3aWxsIGNhbGwgdG9rZW4uc3RyaXAoKSBmb3IgZWFjaCBtYXRjaGVkIHRva2VuLCBpLmUuLCB0aGUgZGVzY3JpcHRpb24gYm9keQogICAgICAgIHN0cmluZ19kYXRhID0gU2tpcFRvKFNFUCwgaWdub3JlPXF1b3RlZFN0cmluZykKICAgICAgICBzdHJpbmdfZGF0YS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIuc3RyaXApKQogICAgICAgIHRpY2tldF9leHByID0gKGludGVnZXIoImlzc3VlX251bSIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJzZXYiKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIoImRheXNfb3BlbiIpKQoKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAgICAgICAgICBwcmludCB0a3QuZHVtcCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgWycxMDEnLCAnQ3JpdGljYWwnLCAnSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCcsICc2J10KICAgICAgICAtIGRheXNfb3BlbjogNgogICAgICAgIC0gZGVzYzogSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaAogICAgICAgIC0gaXNzdWVfbnVtOiAxMDEKICAgICAgICAtIHNldjogQ3JpdGljYWwKICAgICAgICBbJzk0JywgJ0Nvc21ldGljJywgIlNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSIsICcxNCddCiAgICAgICAgLSBkYXlzX29wZW46IDE0CiAgICAgICAgLSBkZXNjOiBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykKICAgICAgICAtIGlzc3VlX251bTogOTQKICAgICAgICAtIHNldjogQ29zbWV0aWMKICAgICAgICBbJzc5JywgJ01pbm9yJywgJ1N5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzJywgJzQ3J10KICAgICAgICAtIGRheXNfb3BlbjogNDcKICAgICAgICAtIGRlc2M6IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzCiAgICAgICAgLSBpc3N1ZV9udW06IDc5CiAg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ZWZ1bCBmb3IgdGFidWxhciByZXBvcnQKICAgIHNjcmFwaW5nIHdoZW4gdGhlIGZpcnN0IGNvbHVtbiBjYW4gYmUgdXNlZCBhcyBhIGl0ZW0ga2V5LgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgIyBwcmludCBhdHRyaWJ1dGVzIGFzIHBsYWluIGdyb3VwcwogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgIyBpbnN0ZWFkIG9mIE9uZU9yTW9yZShleHByKSwgcGFyc2UgdXNpbmcgRGljdChPbmVPck1vcmUoR3JvdXAoZXhwcikpKSAtIERpY3Qgd2lsbCBhdXRvLWFzc2lnbiBuYW1lcwogICAgICAgIHJlc3VsdCA9IERpY3QoT25lT3JNb3JlKEdyb3VwKGF0dHJfZXhwcikpKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCgogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5hc0Rp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AXwBagVkBoMBAQB8AWoGfAJkB2QIjQIBAHwBiAAXAGoFZAl0B4gBgwEXAGQKFwCDAVMAKQthPgMAAEhlbHBlciB0byBkZWZpbmUgYSBjb3VudGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMuCgogICAgVGhpcyBoZWxwZXIgZGVmaW5lcyBhIHBhdHRlcm4gb2YgdGhlIGZvcm06OgoKICAgICAgICBpbnRlZ2VyIGV4cHIgZXhwciBleHByLi4uCgogICAgd2hlcmUgdGhlIGxlYWRpbmcgaW50ZWdlciB0ZWxscyBob3cgbWFueSBleHByIGV4cHJlc3Npb25zIGZvbGxvdy4KICAgIFRoZSBtYXRjaGVkIHRva2VucyByZXR1cm5zIHRoZSBhcnJheSBvZiBleHByIHRva2VucyBhcyBhIGxpc3QgLSB0aGUKICAgIGxlYWRpbmcgY291bnQgdG9rZW4gaXMgc3VwcHJlc3NlZC4KCiAgICBJZiBgYGludEV4cHJgYCBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uCiAgICB0aGF0IHByb2R1Y2VzIGFuIGludGVnZXIgdmFsdWUuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGNvdW50ZWRBcnJheShXb3JkKGFscGhhcykpLnBhcnNlU3RyaW5nKCcyIGFiIGNkIGVmJykgICMgLT4gWydhYicsICdjZCddCgogICAgICAgICMgaW4gdGhpcyBwYXJzZXIsIHRoZSBsZWFkaW5nIGludGVnZXIgdmFsdWUgaXMgZ2l2ZW4gaW4gYmluYXJ5LAogICAgICAgICMgJzEwJyBpbmRpY2F0aW5nIHRoYXQgMiB2YWx1ZXMgYXJlIGluIHRoZSBhcnJheQogICAgICAgIGJpbmFyeUNvbnN0YW50ID0gV29yZCgnMDEnKS5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdDogaW50KHRbMF0sIDIpKQogICAgICAgIGNvdW50ZWRBcnJheShXb3JkKGFscGhhcyksIGludEV4cHI9YmluYXJ5Q29uc3RhbnQpLnBhcnNlU3RyaW5nKCcxMCBhYiBjZCBlZicpICAjIC0+IFsnYWInLCAnY2QnXQogICAgYwMAAAAAAAAABAAA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fAh8CoMCcth8BnwHfAkXAGQLFwA9AHwGag98B3wKgwIBAFAAcdhXAHwHZAs3AH0HcahXAHwBkAFwPHwDDACQAXLYfAKQAXLYeWh0DXwGgwF0DWQNahB8BoMBgwFrApABcop0EWQOZA1qEGQPZBCEAHwGRACDAYMBFgCDAWoSZBFqEHwGgwGDAVMAdBFkEmoQZBNkEIQAfAZEAIMBgwGDAWoSZBFqEHwGgwGDAVMAVwBuJgQAdBNrCpABctYBAAEAAQB0AmoDZBR0C2QCZAONAwEAWQBuAlgAdBSHAGYBZBVkEIQIfAZEAIMBgwFqEmQRahB8BoMBgwFTACkWYYMEAABIZWxwZXIgdG8gcXVpY2tseSBkZWZpbmUgYSBzZXQgb2YgYWx0ZXJuYXRpdmUgTGl0ZXJhbHMsIGFuZCBtYWtlcwogICAgc3VyZSB0byBkbyBsb25nZXN0LWZpcnN0IHRlc3Rpbmcgd2hlbiB0aGVyZSBpcyBhIGNvbmZsaWN0LAogICAgcmVnYXJkbGVzcyBvZiB0aGUgaW5wdXQgb3JkZXIsIGJ1dCByZXR1cm5zCiAgICBhIDpjbGFzczpgTWF0Y2hGaXJzdGAgZm9yIGJlc3QgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKCiAgICAgLSBzdHJzIC0gYSBzdHJpbmcgb2Ygc3BhY2UtZGVsaW1pdGVkIGxpdGVyYWxzLCBvciBhIGNvbGxlY3Rpb24gb2YKICAgICAgIHN0cmluZyBsaXRlcmFscwogICAgIC0gY2FzZWxlc3MgLSAoZGVmYXVsdD0gYGBGYWxzZWBgKSAtIHRyZWF0IGFsbCBsaXRlcmFscyBhcwogICAgICAgY2FzZWxlc3MKICAgICAtIHVzZVJlZ2V4IC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGFzIGFuIG9wdGltaXphdGlvbiwgd2lsbAogICAgICAgZ2VuZXJhdGUgYSBSZWdleCBvYmplY3Q7IG90aGVyd2lzZSwgd2lsbCBnZW5lcmF0ZQogICAgICAgYSA6Y2xhc3M6YE1hdGNoRmlyc3RgIG9iamVjdCAoaWYgYGBjYXNlbGVzcz1UcnVlYGAgb3IgYGBhc0tleXdvcmQ9VHJ1ZWBgLCBvciBpZgogICAgICAgY3JlYXRpbmcgYSA6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AAACAAAABQAAAEMAAABzFAAAAHQAdAF0AnwAfAEXAIMBgwGDAVMAKQFh6QUAAEhlbHBlciB0byBlYXNpbHkgYW5kIGNsZWFybHkgZGVmaW5lIGEgZGljdGlvbmFyeSBieSBzcGVjaWZ5aW5nCiAgICB0aGUgcmVzcGVjdGl2ZSBwYXR0ZXJucyBmb3IgdGhlIGtleSBhbmQgdmFsdWUuICBUYWtlcyBjYXJlIG9mCiAgICBkZWZpbmluZyB0aGUgOmNsYXNzOmBEaWN0YCwgOmNsYXNzOmBaZXJvT3JNb3JlYCwgYW5kCiAgICA6Y2xhc3M6YEdyb3VwYCB0b2tlbnMgaW4gdGhlIHByb3BlciBvcmRlci4gIFRoZSBrZXkgcGF0dGVybgogICAgY2FuIGluY2x1ZGUgZGVsaW1pdGluZyBtYXJrZXJzIG9yIHB1bmN0dWF0aW9uLCBhcyBsb25nIGFzIHRoZXkgYXJlCiAgICBzdXBwcmVzc2VkLCB0aGVyZWJ5IGxlYXZpbmcgdGhlIHNpZ25pZmljYW50IGtleSB0ZXh0LiAgVGhlIHZhbHVlCiAgICBwYXR0ZXJuIGNhbiBpbmNsdWRlIG5hbWVkIHJlc3VsdHMsIHNvIHRoYXQgdGhlIDpjbGFzczpgRGljdGAgcmVzdWx0cwogICAgY2FuIGluY2x1ZGUgbmFtZWQgdG9rZW4gZmllbGRzLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgYXR0cl9sYWJlbCA9IGxhYmVsCiAgICAgICAgYXR0cl92YWx1ZSA9IFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKQoKICAgICAgICAjIHNpbWlsYXIgdG8gRGljdCwgYnV0IHNpbXBsZXIgY2FsbCBmb3JtYXQKICAgICAgICByZXN1bHQgPSBkaWN0T2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkKICAgICAgICBwcmludChyZXN1bHQuc2hhcGUpICAjIG9iamVjdCBhdHRyaWJ1dGUgYWNjZXNzIHdvcmtzIHRvbwogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdsaWdodCBibHVlJ10sIFsndGV4dHVyZScsICdidXJsYXAnXV0KICAgICAgICAtIGNvbG9yOiBsaWdodCBibHVlCiAgICAgICAgLSBwb3NuOiB1cHBlciBsZWZ0CiAgICAgICAgLSBzaGFwZTogU1FVQVJFCiAgICAgICAgLSB0ZXh0dXJlOiBidXJsYXAKICAgICAgICBTUVVBUkUKICAgICAgICBTUVVBUkUKICAgICAgICB7J2NvbG9yJzogJ2xpZ2h0IGJsdWUnLCAnc2hhcGUnOiAnU1FVQVJFJywgJ3Bvc24nOiAndXBwZXIgbGVmdCcsICd0ZXh0dXJlJzogJ2J1cmxhcCd9CiAgICApA3InAAAAcjYAAAByLQAAACkCckMBAAByKwEAAHISAAAAchIAAAByEwAAAHJfAAAArRUAAHMCAAAAACVjAgAAAAAAAAAGAAAAAwAAAEMAAABzXgAAAHQAgwBqAWQBZAKEAIMBfQJ8AmoCgwB9A2QDfANfA3wCZASDAXwAFwB8A2QFgwEXAH0EfAFyQGQGZAKEAH0FbghkB2QIhAB9BXwEagF8BYMBAQB8AGoEfARfBHwEUwApCWGXBAAASGVscGVyIHRvIHJldHVybiB0aGUgb3JpZ2luYWwsIHVudG9rZW5pemVkIHRleHQgZm9yIGEgZ2l2ZW4KICAgIGV4cHJlc3Npb24uICBVc2VmdWwgdG8gcmVzdG9yZSB0aGUgcGFyc2VkIGZpZWxkcyBvZiBhbiBIVE1MIHN0YXJ0CiAgICB0YWcgaW50byB0aGUgcmF3IHRhZyB0ZXh0IGl0c2VsZiwgb3IgdG8gcmV2ZXJ0IHNlcGFyYXRlIHRva2VucyB3aXRoCiAgICBpbnRlcnZlbmluZyB3aGl0ZXNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG1hdGNoaW5nIGlucHV0IHRleHQuIEJ5CiAgICBkZWZhdWx0LCByZXR1cm5zIGFzdHJpbmcgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcGFyc2VkIHRleHQuCgogICAgSWYgdGhlIG9wdGlvbmFsIGBgYXNTdHJpbmdgYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMKICAgIGBgRmFsc2VgYCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCiAgICBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBjb250YWluaW5nIGFueSByZXN1bHRzIG5hbWVzIHRoYXQKICAgIHdlcmUgb3JpZ2luYWxseSBtYXRjaGVkLCBhbmQgYSBzaW5nbGUgdG9rZW4gY29udGFpbmluZyB0aGUgb3JpZ2luYWwKICAgIG1hdGNoZWQgdGV4dCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuICBTbyBpZiB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgdG8KICAgIDpjbGFzczpgb3JpZ2luYWxUZXh0Rm9yYCBjb250YWlucyBleHByZXNzaW9ucyB3aXRoIGRlZmluZWQKICAgIHJlc3VsdHMgbmFtZXMsIHlvdSBtdXN0IHNldCBgYGFzU3RyaW5nYGAgdG8gYGBGYWxzZWBgIGlmIHlvdQogICAgd2FudCB0byBwcmVzZXJ2ZSB0aG9zZSByZXN1bHRzIG5hbWUgdmFsdWVzLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBzcmMgPSAidGhpcyBpcyB0ZXN0IDxiPiBib2xkIDxpPnRleHQ8L2k+IDwvYj4gbm9ybWFsIHRleHQgIgogICAgICAgIGZvciB0YWcgaW4gKCJiIiwgImkiKToKICAgICAgICAgICAgb3BlbmVyLCBj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c2UgaW4gV29yZAogICAgY29uc3RydWN0aW9uLiBCb3Jyb3dzIHN5bnRheCBmcm9tIHJlZ2V4cCAnW10nIHN0cmluZyByYW5nZQogICAgZGVmaW5pdGlvbnM6OgoKICAgICAgICBzcmFuZ2UoIlswLTldIikgICAtPiAiMDEyMzQ1Njc4OSIKICAgICAgICBzcmFuZ2UoIlthLXpdIikgICAtPiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCiAgICAgICAgc3JhbmdlKCJbYS16JF9dIikgLT4gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JF8iCgogICAgVGhlIGlucHV0IHN0cmluZyBtdXN0IGJlIGVuY2xvc2VkIGluIFtdJ3MsIGFuZCB0aGUgcmV0dXJuZWQgc3RyaW5nCiAgICBpcyB0aGUgZXhwYW5kZWQgY2hhcmFjdGVyIHNldCBqb2luZWQgaW50byBhIHNpbmdsZSBzdHJpbmcuIFRoZQogICAgdmFsdWVzIGVuY2xvc2VkIGluIHRoZSBbXSdzIG1heSBiZToKCiAgICAgLSBhIHNpbmdsZSBjaGFyYWN0ZXIKICAgICAtIGFuIGVzY2FwZWQgY2hhcmFjdGVyIHdpdGggYSBsZWFkaW5nIGJhY2tzbGFzaCAoc3VjaCBhcyBgYFwtYGAKICAgICAgIG9yIGBgXF1gYCkKICAgICAtIGFuIGVzY2FwZWQgaGV4IGNoYXJhY3RlciB3aXRoIGEgbGVhZGluZyBgYCdceCdgYAogICAgICAgKGBgXHgyMWBgLCB3aGljaCBpcyBhIGBgJyEnYGAgY2hhcmFjdGVyKSAoYGBcMHgjI2BgCiAgICAgICBpcyBhbHNvIHN1cHBvcnRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCiAgICAgLSBhbiBlc2NhcGVkIG9jdGFsIGNoYXJhY3RlciB3aXRoIGEgbGVhZGluZyBgYCdcMCdgYAogICAgICAgKGBgXDA0MWBgLCB3aGljaCBpcyBhIGBgJyEnYGAgY2hhcmFjdGVyKQogICAgIC0gYSByYW5nZSBvZiBhbnkgb2YgdGhlIGFib3ZlLCBzZXBhcmF0ZWQgYnkgYSBkYXNoIChgYCdhLXonYGAsCiAgICAgICBldGMu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aW4KICAgIGBgaGV4X2ludGVnZXIgPSBXb3JkKGhleG51bXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKGludCwgMTYpKWBgLAogICAgd2hpY2ggd2lsbCBjb252ZXJ0IHRoZSBwYXJzZWQgZGF0YSB0byBhbiBpbnRlZ2VyIHVzaW5nIGJhc2UgMTYuCgogICAgRXhhbXBsZSAoY29tcGFyZSB0aGUgbGFzdCB0byBleGFtcGxlIGluIDpjbGFzczpgUGFyc2VyRWxlbWVudC50cmFuc2Zvcm1TdHJpbmdgOjoKCiAgICAgICAgaGV4X2ludHMgPSBPbmVPck1vcmUoV29yZChoZXhudW1zKSkuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoaW50LCAxNikpCiAgICAgICAgaGV4X2ludHMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIDAwIDExIDIyIGFhIEZGIDBhIDBkIDFhCiAgICAgICAgICAgICcnJykKCiAgICAgICAgdXBwZXJ3b3JkID0gV29yZChhbHBoYXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci51cHBlcikpCiAgICAgICAgT25lT3JNb3JlKHVwcGVyd29yZCkucnVuVGVzdHMoJycnCiAgICAgICAgICAgIG15IGtpbmdkb20gZm9yIGEgaG9yc2UKICAgICAgICAgICAgJycnKQoKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudGl0bGUpKQogICAgICAgIE9uZU9yTW9yZSh3ZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBub3cgaXMgdGhlIHdpbnRlciBvZiBvdXIgZGlzY29udGVudCBtYWRlIGdsb3Jpb3VzIHN1bW1lciBieSB0aGlzIHN1biBvZiB5b3JrCiAgICAgICAgICAgICcnJykKCiAgICBwcmludHM6OgoKICAgICAgICAwMCAxMSAyMiBhYSBGRiAwYSAwZCAxYQogICAgICAgIFswLCAxNywgMzQsIDE3MCwgMjU1LCAxMCwgMTMsIDI2XQoKICAgICAgICBteSBraW5nZG9tIGZvciBhIGhv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IHdpdGggYSByZXF1aXJlZCBhdHRyaWJ1dGUgdmFsdWUsIHRvIGF2b2lkIGZhbHNlCiAgICBtYXRjaGVzIG9uIGNvbW1vbiB0YWdzIHN1Y2ggYXMgYGA8VEQ+YGAgb3IgYGA8RElWPmBgLgoKICAgIENhbGwgYGB3aXRoQXR0cmlidXRlYGAgd2l0aCBhIHNlcmllcyBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kCiAgICB2YWx1ZXMuIFNwZWNpZnkgdGhlIGxpc3Qgb2YgZmlsdGVyIGF0dHJpYnV0ZXMgbmFtZXMgYW5kIHZhbHVlcyBhczoKCiAgICAgLSBrZXl3b3JkIGFyZ3VtZW50cywgYXMgaW4gYGAoYWxpZ249InJpZ2h0IilgYCwgb3IKICAgICAtIGFzIGFuIGV4cGxpY2l0IGRpY3Qgd2l0aCBgYCoqYGAgb3BlcmF0b3IsIHdoZW4gYW4gYXR0cmlidXRlCiAgICAgICBuYW1lIGlzIGFsc28gYSBQeXRob24gcmVzZXJ2ZWQgd29yZCwgYXMgaW4gYGAqKnsiY2xhc3MiOiJDdXN0b21lciIsICJhbGlnbiI6InJpZ2h0In1gYAogICAgIC0gYSBsaXN0IG9mIG5hbWUtdmFsdWUgdHVwbGVzLCBhcyBpbiBgYCgoIm5zMTpjbGFzcyIsICJDdXN0b21lciIpLCAoIm5zMjphbGlnbiIsICJyaWdodCIpKWBgCgogICAgRm9yIGF0dHJpYnV0ZSBuYW1lcyB3aXRoIGEgbmFtZXNwYWNlIHByZWZpeCwgeW91IG11c3QgdXNlIHRoZSBzZWNvbmQKICAgIGZvcm0uICBBdHRyaWJ1dGUgbmFtZXMgYXJlIG1hdGNoZWQgaW5zZW5zaXRpdmUgdG8gdXBwZXIvbG93ZXIgY2FzZS4KCiAgICBJZiBqdXN0IHRlc3RpbmcgZm9yIGBgY2xhc3NgYCAod2l0aCBvciB3aXRob3V0IGEgbmFtZXNwYWNlKSwgdXNlCiAgICA6Y2xhc3M6YHdpdGhDbGFzc2AuCgogICAgVG8gdmVyaWZ5IHRoYXQgdGhlIGF0dHJpYnV0ZSBleGlzdHMsIGJ1dCB3aXRob3V0IHNwZWNpZnlpbmcgYSB2YWx1ZSwKICAgIHBhc3MgYGB3aXRoQXR0cmlidXRlLkFOWV9WQUxVRWBgIGFzIHRoZSB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgaHRtbCA9ICcnJwogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICBTb21lIHRleHQKICAgICAgICAgICAgPGRpdiB0eXBlPSJncmlkIj4xIDQgMCAxIDA8L2Rpdj4KICAgICAgICAgICAgPGRpdiB0eXBlPSJncmFwaCI+MSwzIDIsMyAxLDE8L2Rpdj4KICAgICAgICAgICAgPGRpdj50aGlzIGhhcyBubyB0eXBlPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKCiAgICAgICAgIyBvbmx5IG1hdGNoIGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAiZ3JpZCIKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT0iZ3JpZCIpKQogICAgICAgIGdyaWRfZXhwciA9IGRpdl9ncmlkICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZ3JpZF9oZWFkZXIgaW4gZ3JpZF9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZ3JpZF9oZWFkZXIuYm9keSkKCiAgICAgICAgIyBjb25zdHJ1Y3QgYSBtYXRjaCB3aXRoIGFueSBkaXYgdGFnIGhhdmluZyBhIHR5cGUgYXR0cmlidXRlLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZQogICAgICAgIGRpdl9hbnlfdHlwZSA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT13aXRoQXR0cmlidXRlLkFOWV9WQUxVRSkpCiAgICAgICAgZGl2X2V4cHIgPSBkaXZfYW55X3R5cGUgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBkaXZfaGVhZGVyIGluIGRpdl9leHByLnNlYXJjaFN0cmluZyhodG1s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c2UgYWN0aW9ucyBjYW4gYWxzbyBiZQogICAgYXR0YWNoZWQgdG8gb3BlcmF0b3IgZXhwcmVzc2lvbnMuIFRoZSBnZW5lcmF0ZWQgcGFyc2VyIHdpbGwgYWxzbwogICAgcmVjb2duaXplIHRoZSB1c2Ugb2YgcGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMKICAgIChzZWUgZXhhbXBsZSBiZWxvdykuCgogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UKICAgIGlzc3VlcyB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZQogICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRgIGZvciBhIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseQogICAgaW1wcm92ZSB5b3VyIHBhcnNlciBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmFzZUV4cHIgLSBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbW9zdCBiYXNpYyBlbGVtZW50IGZvciB0aGUKICAgICAgIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsCiAgICAgICBpbiB0aGUgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtIGBgKG9wRXhwciwKICAgICAgIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pYGAsIHdoZXJlOgoKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOyBtYXkgYWxzbwogICAgICAgICBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOyBpZiBudW1UZXJtcwogICAgICAgICBpcyAzLCBvcEV4cHIgaXMgYSB0dXBsZSBvZiB0d28gZXhwcmVzc2lvbnMsIGZvciB0aGUgdHdvCiAgICAgICAgIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QgYmUgMSwKICAgICAgICAgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcyByaWdodAogICAgICAgICBvciBsZWZ0IGFzc29jaWF0aXZlLCB1c2luZyB0aGUgcHlwYXJzaW5nLWRlZmluZWQgY29uc3RhbnRzCiAgICAgICAgIGBgb3BBc3NvYy5SSUdIVGBgIGFuZCBgYG9wQXNzb2MuTEVGVGBgLgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICBleHByZXNzaW9ucyBtYXRjaGluZyB0aGlzIG9wZXJhdG9yIGV4cHJlc3Npb24gKHRoZSBwYXJzZSBhY3Rpb24KICAgICAgICAgdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKTsgaWYgdGhlIHBhcnNlIGFjdGlvbiBpcyBwYXNzZWQKICAgICAgICAgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKICAgICAgICAgYGBzZXRQYXJzZUFjdGlvbigqZm4pYGAKICAgICAgICAgKDpjbGFzczpgUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbmApCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcwogICAgICAgKGRlZmF1bHQ9IGBgU3VwcHJlc3MoJygnKWBgKQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzCiAgICAgICAoZGVmYXVsdD0gYGBTdXBwcmVzcygnKScpYGApCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQKICAgICAgICAjIHZhcmlhYmxlIG5hbWVzCiAgICAgICAgaW50ZWdlciA9IHB5cGFyc2luZ19jb21tb24uc2lnbmVkX2ludGVnZXIKICAgICAgICB2YXJuYW1lID0gcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgICAgIGFyaXRoX2V4cHIgPSBpbmZpeE5vdGF0aW9uKGludGVnZXIgfCB2YXJuYW1lLAogICAgICAgICAgICBbCiAgICAgICAgICAgICgnLScsIDEsIG9wQXNzb2MuUklHSFQpLAogICAgICAgICAgICAob25lT2YoJyogLycpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICAob25lT2YoJysgLScpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICBdKQoKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAoNSszKSo2CiAgICAgICAgICAgIC0yLS0xMQogICAgICAgICAgICAnJycsIGZ1bGxEdW1wPUZhbHNlKQoKICAgIHByaW50czo6CgogICAgICAgIDUrMyo2CiAgICAgICAgW1s1LCAnKycsIFszLCAnKicsIDZdXV0KCiAgICAgICAgKDUrMykqNgogICAgICAgIFtbWzUsICcrJywgM10sICcqJywgNl1dCgogICAgICAgIC0yLS0xMQogICAgICAgIFtbWyctJywgMl0sICctJywgWyctJywgMTFdXV0KICAgIGMAAAAAAAAAAAAAAAADAAAAQAAAAHMWAAAAZQBaAWQAWgJkBWQCZAOEAVoDZARTACkGehppbmZpeE5vdGF0aW9uLjxsb2NhbHM+Ll9GQlRjBAAAAAAAAAAEAAAAAwAAAFMAAABzFgAAAHwAagBqAXwBfAKDAgEAfAJnAGYCUwApAU4pAnKPAQAAcvQBAAApBHLHAAAAco4BAABywwAAAHLVAQAAchIAAAByEgAAAHITAAAAcuUAAACtFwAAcwQAAAAAAQ4BeiRpbmZpeE5vdGF0aW9uLjxsb2Nh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bmVgYCkKICAgICAtIGlnbm9yZUV4cHIgLSBleHByZXNzaW9uIGZvciBpZ25vcmluZyBvcGVuaW5nIGFuZCBjbG9zaW5nCiAgICAgICBkZWxpbWl0ZXJzIChkZWZhdWx0PSA6Y2xhc3M6YHF1b3RlZFN0cmluZ2ApCgogICAgSWYgYW4gZXhwcmVzc2lvbiBpcyBub3QgcHJvdmlkZWQgZm9yIHRoZSBjb250ZW50IGFyZ3VtZW50LCB0aGUKICAgIG5lc3RlZCBleHByZXNzaW9uIHdpbGwgY2FwdHVyZSBhbGwgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgY29udGVudAogICAgYmV0d2VlbiBkZWxpbWl0ZXJzIGFzIGEgbGlzdCBvZiBzZXBhcmF0ZSB2YWx1ZXMuCgogICAgVXNlIHRoZSBgYGlnbm9yZUV4cHJgYCBhcmd1bWVudCB0byBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBtYXkKICAgIGNvbnRhaW4gb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMKICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIGZvciBuZXN0aW5nLCBzdWNoIGFzIHF1b3RlZFN0cmluZyBvcgogICAgYSBjb21tZW50IGV4cHJlc3Npb24uICBTcGVjaWZ5IG11bHRpcGxlIGV4cHJlc3Npb25zIHVzaW5nIGFuCiAgICA6Y2xhc3M6YE9yYCBvciA6Y2xhc3M6YE1hdGNoRmlyc3RgLiBUaGUgZGVmYXVsdCBpcwogICAgOmNsYXNzOmBxdW90ZWRTdHJpbmdgLCBidXQgaWYgbm8gZXhwcmVzc2lvbnMgYXJlIHRvIGJlIGlnbm9yZWQsIHRoZW4KICAgIHBhc3MgYGBOb25lYGAgZm9yIHRoaXMgYXJndW1lbnQuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGFfdHlwZSA9IG9uZU9mKCJ2b2lkIGludCBzaG9ydCBsb25nIGNoYXIgZmxvYXQgZG91YmxlIikKICAgICAgICBkZWNsX2RhdGFfdHlwZSA9IENvbWJpbmUoZGF0YV90eXBlICsgT3B0aW9uYWwoV29yZCgnKicpKSkKICAgICAgICBpZGVudCA9IFdvcmQoYWxwaGFzKydfJywgYWxwaGFudW1zKydfJykKICAgICAgICBudW1iZXIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlcgogICAgICAgIGFyZyA9IEdyb3VwKGRlY2xfZGF0YV90eXBlICsgaWRlbnQpCiAgICAgICAgTFBBUiwgUlBBUiA9IG1hcChTdXBwcmVzcywgIigpIikKCiAgICAgICAgY29kZV9ib2R5ID0gbmVzdGVkRXhwcigneycsICd9JywgaWdub3JlRXhwcj0ocXVvdGVkU3RyaW5nIHwgY1N0eWxlQ29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKQogICAgICAgICAgICAgICAgICAgICAgKyBpZGVudCgibmFtZSIpCiAgICAgICAgICAgICAgICAgICAgICArIExQQVIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KGFyZyksIFtdKSgiYXJncyIpICsgUlBBUgogICAgICAgICAgICAgICAgICAgICAgKyBjb2RlX2JvZHkoImJvZHkiKSkKICAgICAgICBjX2Z1bmN0aW9uLmlnbm9yZShjU3R5bGVDb21tZW50KQoKICAgICAgICBzb3VyY2VfY29kZSA9ICcnJwogICAgICAgICAgICBpbnQgaXNfb2RkKGludCB4KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHglMik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGludCBkZWNfdG9faGV4KGNoYXIgaGNoYXIpIHsKICAgICAgICAgICAgICAgIGlmIChoY2hhciA+PSAnMCcgJiYgaGNoYXIgPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcmQoaGNoYXIpLW9yZCgnMCcpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxMCtvcmQoaGNoYXIpLW9yZCgnQScpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICcnJwogICAgICAgIGZvciBmdW5jIGluIGNfZnVuY3Rpb24uc2VhcmNoU3RyaW5nKHNvdXJjZV9jb2RlKToKICAgICAgICAgICAgcHJpbnQoIiUobmFtZSlzICglKHR5cGUpcykgYXJnczogJShhcmdzKXMiICUgZnVuYykKCgogICAgcHJpbnRzOjoKCiAgICAgICAgaXNfb2RkIChpbnQpIGFyZ3M6IFtbJ2ludCcsICd4J11dCiAgICAgICAgZGVjX3RvX2hleCAoaW50KSBhcmdzOiBbWydjaGFyJywgJ2hjaGFyJ11dCiAgICB6Lm9wZW5pbmcgYW5kIGNsb3Npbmcgc3RyaW5ncyBjYW5ub3QgYmUgdGhlIHNhbWVOcpQAAAApAXKdAgAAYwEAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQBqAIMAUwApAk5yAQAAACkBctcAAAApAXKYAAAAchIAAAByEgAAAHITAAAAcpkAAAA7GAAAcwAAAAB6HG5lc3RlZEV4cHIuPGxvY2Fscz4uPGxhbWJkYT5jAQAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAGoAgwBTACkCTnIBAAAAKQFy1wAAACkBcpgAAAByEgAAAHISAAAAchMAAABymQAAAEAYAABzAAAAAGMBAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAagCDAFMAKQJOcgEAAAApAXLXAAAAKQFymAAAAHISAAAAchIAAAByEwAAAHKZAAAARxgAAHMAAAAAYwEAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQBqAIMAUwApAk5yAQAAACkBctcAAAApAXKYAAAAchIAAAByEgAAAHITAAAAcpkAAABMGAAAcwAAAAB6T29wZW5pbmcgYW5kIGNsb3NpbmcgYXJndW1lbnRzIG11c3QgYmUgc3RyaW5ncyBpZiBubyBjb250ZW50IGV4cHJlc3Npb24gaXMgZ2l2ZW56Fm5lc3RlZCAlcyVzIGV4cHJlc3Npb24pEnIyAgAAcpoAAAByGQEAAHLSAAAAciYAAAByNgAAAHIlAAAAckEAAAByrgEAAHKhAAAAcmEAAAByTAEAAHIxAAAAcisAAAByLQAAAHJIAAAAck8AAAByzAEAACkF2gZvcGVuZXLaBmNsb3NlctoHY29udGVudHIHAwAAcqQAAAByEgAAAHISAAAAchMAAABybgAAAO8XAABzNgAAAABBCAEIAQoBFgEYAQgBCAECAhoCDAIIAhABDgIIAQQDLAEMAgQCJgEMAggBBgEKASoCJAESAWMDAAAAAAAAAAsAAAAGAAAAAwAAAHMmAQAAiAFkAWQBhQIZAIkAhwCHAWYCZAJkA4QIiQKHAWYBZARkBYQIfQOHAWYBZAZkB4QIfQSHAWYBZAhkCYQIfQV0AHQBgwBqAmQKgwFqA4MAdASDAGQLjQJ9BnQFgwB0BYMAagZ8BIMBFwBqB2QMgwF9B3QFgwBqBnwDgwFqB2QNgwF9CHQFgwBqBnwFgwFqB2QOgwF9CXwCcsx0CHQJfAaDAXwHFwB0AHwIdAh8AIMBFwB0CXwGgwEXAHQEgwBkC40CFwB8CRcAgwF9Cm4udAh0CXwGgwF0AHwIdAh8AIMBFwB0CXwGgwEXAHQEgwBkC40CFwB8CRcAgwF9CnwKagqHAmYBZA9kEIQIgwEBAHwAagt0DHQBgwAXAIMBAQB8CmoHZBGDAVMAKRJh5ggAAEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIHNwYWNlLWRlbGltaXRlZCBpbmRlbnRhdGlvbiBibG9ja3MsCiAgICBzdWNoIGFzIHRob3NlIHVzZWQgdG8gZGVmaW5lIGJsb2NrIHN0YXRlbWVudHMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLgoKICAgIFBhcmFtZXRlcnM6CgogICAgIC0gYmxvY2tTdGF0ZW1lbnRFeHByIC0gZXhwcmVzc2lvbiBkZWZpbmluZyBzeW50YXggb2Ygc3RhdGVtZW50IHRoYXQKICAgICAgIGlzIHJlcGVhdGVkIHdpdGhpbiB0aGUgaW5kZW50ZWQgYmxvY2sKICAgICAtIGluZGVudFN0YWNrIC0gbGlzdCBjcmVhdGVkIGJ5IGNhbGxlciB0byBtYW5hZ2UgaW5kZW50YXRpb24gc3RhY2sKICAgICAgIChtdWx0aXBsZSBzdGF0ZW1lbnRXaXRoSW5kZW50ZWRCbG9jayBleHByZXNzaW9ucyB3aXRoaW4gYSBzaW5nbGUKICAgICAgIGdyYW1tYXIgc2hvdWxkIHNoYXJlIGEgY29tbW9uIGluZGVudFN0YWNrKQogICAgIC0gaW5kZW50IC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZCBiZXlvbmQKICAgICAgIHRoZSBjdXJyZW50IGxldmVsOyBzZXQgdG8gRmFsc2UgZm9yIGJsb2NrIG9mIGxlZnQtbW9zdAogICAgICAgc3RhdGVtZW50cyAoZGVmYXVsdD0gYGBUcnVlYGApCgogICAgQSB2YWxpZCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGBgYmxvY2tTdGF0ZW1lbnRgYC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YSA9ICcnJwogICAgICAgIGRlZiBBKHopOgogICAgICAgICAgQTEKICAgICAgICAgIEIgPSAxMDAKICAgICAgICAgIEcgPSBBMgogICAgICAgICAgQTIKICAgICAgICAgIEEzCiAgICAgICAgQgogICAgICAgIGRlZiBCQihhLGIsYyk6CiAgICAgICAgICBCQjEKICAgICAgICAgIGRlZiBCQkEoKToKICAgICAgICAgICAgYmJhMQogICAgICAgICAgICBiYmEyCiAgICAgICAgICAgIGJiYTMKICAgICAgICBDCiAgICAgICAgRAogICAgICAgIGRlZiBzcGFtKHgseSk6CiAgICAgICAgICAgICBkZWYgZWdncyh6KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgJycnCgoKICAgICAgICBpbmRlbnRTdGFjayA9IFsxXQogICAgICAgIHN0bXQgPSBGb3J3YXJkKCkKCiAgICAgICAgaWRlbnRpZmllciA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgZnVuY0RlY2wgPSAoImRlZiIgKyBpZGVudGlmaWVyICsgR3JvdXAoIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSkgKyAiKSIpICsgIjoiKQogICAgICAgIGZ1bmNfYm9keSA9IGluZGVudGVkQmxvY2soc3RtdCwgaW5kZW50U3RhY2spCiAgICAgICAgZnVuY0RlZiA9IEdyb3VwKGZ1bmNEZWNsICsgZnVuY19ib2R5KQoKICAgICAgICBydmFsdWUgPSBGb3J3YXJkKCkKICAgICAgICBmdW5jQ2FsbCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHJ2YWx1ZSkpICsgIikiKQogICAgICAgIHJ2YWx1ZSA8PCAoZnVuY0NhbGwgfCBpZGVudGlmaWVyIHwgV29yZChudW1zKSkKICAgICAgICBhc3NpZ25tZW50ID0gR3JvdXAoaWRlbnRpZmllciArICI9IiArIHJ2YWx1ZSkKICAgICAgICBzdG10IDw8IChmdW5jRGVmIHwgYXNzaWdubWVudCB8IGlkZW50aWZpZXIpCgogICAgICAgIG1vZHVsZV9ib2R5ID0gT25lT3JNb3JlKHN0bXQpCgogICAgICAgIHBhcnNlVHJlZSA9IG1vZHVsZV9ib2R5LnBhcnNlU3RyaW5nKGRhdGEpCiAgICAgICAgcGFyc2VUcmVlLnBwcmludCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgW1snZGVmJywKICAgICAgICAgICdBJywKICAgICAgICAgIFsnKCcsICd6JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0ExJ10sIFtbJ0InLCAnPScsICcxMDAnXV0sIFtbJ0cnLCAnPScsICdBMiddXSwgWydBMiddLCBbJ0EzJ11dXSwKICAgICAgICAgJ0InLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnQkInLAogICAgICAgICAgWycoJywgJ2EnLCAnYicsICdjJywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0JCMSddLCBbWydkZWYnLCAnQkJBJywgWycoJywgJyknXSwgJzonLCBbWydiYmExJ10sIFsnYmJhMiddLCBbJ2JiYTMnXV1dXV1dLAogICAgICAgICAnQycsCiAgICAgICAgICdEJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ3NwYW0nLAogICAgICAgICAgWycoJywgJ3gnLCAneScsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbW1snZGVmJywgJ2VnZ3MnLCBbJygnLCAneicsICcpJ10sICc6JywgW1sncGFzcyddXV1dXV1dCiAgICBOYwAAAAAAAAAAAAAAAAQAAAATAAAA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bWVyaWMgZm9ybXMgKDpjbGFzczpgaW50ZWdlcnM8aW50ZWdlcj5gLCA6Y2xhc3M6YHJlYWxzPHJlYWw+YCwKICAgICAgIDpjbGFzczpgc2NpZW50aWZpYyBub3RhdGlvbjxzY2lfcmVhbD5gKQogICAgIC0gY29tbW9uIDpjbGFzczpgcHJvZ3JhbW1pbmcgaWRlbnRpZmllcnM8aWRlbnRpZmllcj5gCiAgICAgLSBuZXR3b3JrIGFkZHJlc3NlcyAoOmNsYXNzOmBNQUM8bWFjX2FkZHJlc3M+YCwKICAgICAgIDpjbGFzczpgSVB2NDxpcHY0X2FkZHJlc3M+YCwgOmNsYXNzOmBJUHY2PGlwdjZfYWRkcmVzcz5gKQogICAgIC0gSVNPODYwMSA6Y2xhc3M6YGRhdGVzPGlzbzg2MDFfZGF0ZT5gIGFuZAogICAgICAgOmNsYXNzOmBkYXRldGltZTxpc284NjAxX2RhdGV0aW1lPmAKICAgICAtIDpjbGFzczpgVVVJRDx1dWlkPmAKICAgICAtIDpjbGFzczpgY29tbWEtc2VwYXJhdGVkIGxpc3Q8Y29tbWFfc2VwYXJhdGVkX2xpc3Q+YAoKICAgIFBhcnNlIGFjdGlvbnM6CgogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9JbnRlZ2VyYAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9GbG9hdGAKICAgICAtIDpjbGFzczpgY29udmVydFRvRGF0ZWAKICAgICAtIDpjbGFzczpgY29udmVydFRvRGF0ZXRpbWVgCiAgICAgLSA6Y2xhc3M6YHN0cmlwSFRNTFRhZ3NgCiAgICAgLSA6Y2xhc3M6YHVwY2FzZVRva2Vuc2AKICAgICAtIDpjbGFzczpgZG93bmNhc2VUb2tlbnNgCgogICAgRXhhbXBsZTo6CgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mbnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5oZXhfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgICAgICAxMDAKICAgICAgICAgICAgRkYKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZyYWN0aW9uLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubWl4ZWRfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAgICAgMQogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAxLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIGltcG9ydCB1dWlkCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHV1aWQuVVVJRCkpCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHV1aWQKICAgICAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgICAgICcnJykKCiAgICBwcmludHM6OgoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgIDEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwLjBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAxMDAKICAgICAgICBbMjU2XQoKICAgICAgICBGRgogICAgICAgIFsyNTVdCgogICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAxCiAgICAgICAgWzFdCgogICAgICAgIDEvMgogICAgICAgIFswLjVdCgogICAgICAgIC0zLzQKICAgICAgICBbLTAuNzVdCgogICAgICAgIDEtMy80CiAgICAgICAgWzEuNzVdCgogICAgICAgICMgdXVpZAogICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgIFtVVUlEKCcxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgnKV0KICAgINoHaW50ZWdlcnoLaGV4IGludGVnZXJy4QAAAHoIWystXT9cZCt6DnNpZ25lZCBpbnRlZ2VyclkDAADaCGZyYWN0aW9uYwEAAAAAAAAAAQAAAAMAAABDAAAAcxAAAAB8AGQBGQB8AGQDGQAbAFMAKQROcgEAAABylAAAAHKVAAAAchIAAAApAXKYAAAAchIAAAByEgAAAHITAAAAcpkAAACkGQAAcwAAAAB6GXB5cGFyc2luZ19jb21tb24uPGxhbWJkYT5y1wIAAHoiZnJhY3Rpb24gb3IgbWl4ZWQgaW50ZWdlci1mcmFjdGlvbnoXWystXT8oPzpcZCtcLlxkKnxcLlxkKyl6C3JlYWwgbnVtYmVyekBbKy1dPyg/OlxkKyg/OltlRV1bKy1dP1xkKyl8KD86XGQrXC5cZCp8XC5cZCspKD86W2VFXVsrLV0/XGQrKT8peiRyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb256HVsrLV0/XGQrXC4/XGQqKFtlRV1bKy1dP1xkKyk/2gdmbnVtYmVycvkCAADaCmlkZW50aWZpZXJ6SygyNVswLTVdfDJbMC00XVswLTldfDE/WzAtOV17MSwyfSkoXC4oMjVbMC01XXwyWzAtNF1bMC05XXwxP1swLTldezEsMn0pKXszfXoMSVB2NCBhZGRyZXNzehBbMC05YS1mQS1GXXsxLDR92gtoZXhfaW50ZWdlcnJaAwAA6QcAAAB6EWZ1bGwgSVB2NiBhZGRyZXNzcgEAAAByogEAAHoCOjp6EnNob3J0IElQdjYgYWRkcmVzc2MBAAAAAAAAAAEAAAADAAAAQwAAAHMWAAAAdABkAWQChAB8AEQAgwGDAWQDawBTACkETmMBAAAAAAAAAAIAAAADAAAAcwAAAHMeAAAAfABdFn0BdABqAWoCfAGDAXICZABWAAEAcQJkAVMAKQJylAAAAE4pA3KMAAAA2gpfaXB2Nl9wYXJ0choCAAApAnIVAAAAciwDAAByEgAAAHISAAAAchMAAABypwAAAMQZAABzAgAAAAQAeixweXBhcnNpbmdfY29tbW9uLjxsYW1iZGE+Ljxsb2NhbHM+LjxnZW5leHByPnJKAwAAKQFy7QIAACkBcpgAAAByEgAAAHISAAAAchMAAABymQAAAMQZAABzAAAAAHoHOjpmZmZmOnoSbWl4ZWQgSVB2NiBhZGRyZXNzegxJUHY2IGFkZHJlc3N6OlswLTlhLWZBLUZdezJ9KFs6Li1dKVswLTlhLWZBLUZdezJ9KD86XDFbMC05YS1mQS1GXXsyfSl7NH16C01BQyBhZGRyZXNz+gglWS0lbS0lZGMBAAAAAAAAAAIAAAADAAAAAwAAAHMQAAAAhwBmAWQBZAKECH0BfAFTACkDYd0BAAAKICAgICAgICBIZWxwZXIgdG8gY3JlYXRlIGEgcGFyc2UgYWN0aW9uIGZvciBjb252ZXJ0aW5nIHBhcnNlZCBkYXRlIHN0cmluZyB0byBQeXRob24gZGF0ZXRpbWUuZGF0ZQoKICAgICAgICBQYXJhbXMgLQogICAgICAgICAtIGZtdCAtIGZvcm1hdCB0byBiZSBwYXNzZWQgdG8gZGF0ZXRpbWUuc3RycHRpbWUgKGRlZmF1bHQ9IGBgIiVZLSVtLSVkImBgKQoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGRhdGVfZXhwciA9IHB5cGFyc2luZ19jb21tb24uaXNvODYwMV9kYXRlLmNvcHkoKQogICAgICAgICAgICBkYXRlX2V4cHIuc2V0UGFyc2VBY3Rpb24ocHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRlKCkpCiAgICAgICAgICAgIHByaW50KGRhdGVfZXhwci5wYXJzZVN0cmluZygiMTk5OS0xMi0zMSIpKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgW2RhdGV0aW1lLmRhdGUoMTk5OSwgMTIsIDMxKV0KICAgICAgICBjAwAAAAAAAAAEAAAAEQAAABMAAABzTAAAAHkUdABqAXwCZAEZAIgAgwJqAoMAUwAEAHQDawpyRgEAfQMBAHoWdAR8AHwBdAV8A4MBgwOCAVcAWQBkAGQAfQN+A1gAbgJYAGQAUwApAk5yAQAAACkGcgMAAADaCHN0cnB0aW1l2gRkYXRlcjICAAByPAAAAHKcAAAAKQRyqgAAAHK7AAAAcpgAAADaAnZlKQHaA2ZtdHISAAAAchMAAADaBmN2dF9mbt4ZAABzCAAAAAABAgEUARABei5weXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGUuPGxvY2Fscz4uY3Z0X2ZuchIAAAApAnKgAwAAcqEDAAByEgAAACkBcqADAAByEwAAANoNY29udmVydFRvRGF0ZcwZAABzBAAAAAASDAV6HnB5cGFyc2luZ19jb21tb24uY29udmVydFRvRGF0ZfoUJVktJW0tJWRUJUg6JU06JVMuJWZjAQAAAAAAAAACAAAAAwAAAAMAAABzEAAAAIcAZgFkAWQChAh9AXwBUwApA2EXAgAASGVscGVyIHRvIGNyZWF0ZSBhIHBhcnNlIGFjdGlvbiBmb3IgY29udmVydGluZyBwYXJzZWQKICAgICAgICBkYXRldGltZSBzdHJpbmcgdG8gUHl0aG9uIGRhdGV0aW1lLmRhdGV0aW1lCgogICAgICAgIFBhcmFtcyAtCiAgICAgICAgIC0gZm10IC0gZm9ybWF0IHRvIGJlIHBhc3NlZCB0byBkYXRldGltZS5zdHJwdGltZSAoZGVmYXVsdD0gYGAiJVktJW0tJWRUJUg6JU06JVMuJWYiYGApCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgZHRfZXhwciA9IHB5cGFyc2luZ19jb21tb24uaXNvODYwMV9kYXRldGltZS5jb3B5KCkKICAgICAgICAgICAgZHRfZXhwci5zZXRQYXJzZUFjdGlvbihweXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGV0aW1lKCkpCiAgICAgICAgICAgIHByaW50KGR0X2V4cHIucGFyc2VTdHJpbmcoIjE5OTktMTItMzFUMjM6NTk6NTkuOTk5IikpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbZGF0ZXRpbWUuZGF0ZXRpbWUoMTk5OSwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTkwMDApXQogICAgICAgIGMDAAAAAAAAAAQAAAARAAAAEwAAAHNIAAAAeRB0AGoBfAJkARkAiACDAlMABAB0AmsKckIBAH0DAQB6FnQDfAB8AXQEfAODAYMDggFXAFkAZABkAH0DfgNYAG4CWABkAFMAKQJOcgEAAAApBXIDAAAAcp0DAAByMgIAAHI8AAAAcpwAAAApBHKqAAAAcrsAAABymAAAAHKfAwAAKQFyoAMAAHISAAAAchMAAAByoQMAAPcZAABzCAAAAAABAgEQARABejJweXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGV0aW1lLjxsb2NhbHM+LmN2dF9mbnISAAAAKQJyoAMAAHKhAwAAchIAAAApAXKgAwAAchMAAADaEWNvbnZlcnRUb0RhdGV0aW1l5RkAAHMEAAAAABIMBXoicHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRldGltZXo3KD9QPHllYXI+XGR7NH0pKD86LSg/UDxtb250aD5cZFxkKSg/Oi0oP1A8ZGF5PlxkXGQpKT8pP3oMSVNPODYwMSBkYXRleoYoP1A8eWVhcj5cZHs0fSktKD9QPG1vbnRoPlxkXGQpLSg/UDxkYXk+XGRcZClbVCBdKD9QPGhvdXI+XGRcZCk6KD9QPG1pbnV0ZT5cZFxkKSg6KD9QPHNlY29uZD5cZFxkKFwuXGQqKT8pPyk/KD9QPHR6Plp8WystXVxkXGQ6P1xkXGQpP3oQSVNPODYwMSBkYXRldGltZXoyWzAtOWEtZkEtRl17OH0oLVswLTlhLWZBLUZdezR9KXszfS1bMC05YS1mQS1GXXsxMn3aBFVVSURjAwAAAAAAAAADAAAAAwAAAEMAAABzEAAAAHQAagFqAnwCZAEZAIMBUwApAmEWAgAAUGFyc2UgYWN0aW9uIHRvIHJlbW92ZSBIVE1MIHRhZ3MgZnJvbSB3ZWIgcGFnZSBIVE1MIHNvdXJjZQoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICMgc3RyaXAgSFRNTCBsaW5rcyBmcm9tIG5vcm1hbCB0ZXh0CiAgICAgICAgICAgIHRleHQgPSAnPHRkPk1vcmUgaW5mbyBhdCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3B5cGFyc2luZy9weXBhcnNpbmcvd2lraSI+cHlwYXJzaW5nPC9hPiB3aWtpIHBhZ2U8L3RkPicKICAgICAgICAgICAgdGQsIHRkX2VuZCA9IG1ha2VIVE1MVGFncygiVEQiKQogICAgICAgICAgICB0YWJsZV90ZXh0ID0gdGQgKyBTa2lwVG8odGRfZW5kKS5zZXRQYXJzZUFjdGlvbihweXBhcnNpbmdfY29tbW9uLnN0cmlwSFRNTFRhZ3MpKCJib2R5IikgKyB0ZF9lbmQKICAgICAgICAgICAgcHJpbnQodGFibGVfdGV4dC5wYXJzZVN0cmluZyh0ZXh0KS5ib2R5KQoKICAgICAgICBQcmludHM6OgoKICAgICAgICAgICAgTW9yZSBpbmZvIGF0IHRoZSBweXBhcnNpbmcgd2lraSBwYWdlCiAgICAgICAgcgEAAAApA3KMAAAA2g5faHRtbF9zdHJpcHBlcnKiAAAAKQNyqgAAAHK7AAAAcvEBAAByEgAAAHISAAAAchMAAADaDXN0cmlwSFRNTFRhZ3MIGgAAcwIAAAAAEHoecHlwYXJzaW5nX2NvbW1vbi5zdHJpcEhUTUxUYWdzciMDAAApAXKMAgAAegIgCXKUAwAAcrYAAAApAXI+AQAAehRjb21tYSBzZXBhcmF0ZWQgbGlzdGMBAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAdAB8AIMBagGDAFMAKQFOKQJypQAAAHJ8AgAAKQFymAAAAHISAAAAchIAAAByEwAAAHKZAAAAIxoAAHMAAAAAYwEAAAAAAAAAAQAAAAIAAABDAAAAcwwAAAB0AHwAgwFqAYMAUwApAU4pAnKlAAAAclYDAAApAXKYAAAAchIAAAByEgAAAHITAAAAcpkAAAAmGgAAcwAAAABOKQJyAQAAAHKiAQAAKQJyAQAAAHKiAQAAKQFynAMAACkBcqMDAAApP3IPAAAAchAAAAByEQAAAHLfAAAAcosAAABylwAAANoQY29udmVydFRvSW50ZWdlctoFZmxvYXTaDmNvbnZlcnRUb0Zsb2F0ckwAAABycAAAAHLMAQAAcqEAAABylQMAAHJiAAAAcpkDAAByRAAAANoOc2lnbmVkX2ludGVnZXJylgMAAHLhAQAAcjgAAAByQAIAANoNbWl4ZWRfaW50ZWdlcnLtAgAA2gRyZWFs2ghzY2lfcmVhbHIQAgAA2gZudW1iZXJylwMAAHJSAAAAclEAAABymAMAANoMaXB2NF9hZGRyZXNzcpsDAADaEl9mdWxsX2lwdjZfYWRkcmVzc9oTX3Nob3J0X2lwdjZfYWRkcmVzc3LiAQAA2hNfbWl4ZWRfaXB2Nl9hZGRyZXNzciYAAADaDGlwdjZfYWRkcmVzc9oLbWFjX2FkZHJlc3Ny/QAAAHKiAwAAcqQDAADaDGlzbzg2MDFfZGF0ZdoQaXNvODYwMV9kYXRldGltZdoEdXVpZHJVAAAAclQAAABypgMAAHKnAwAAcjYAAAByMQAAAHIvAAAAcnQAAABySwAAANoNX2NvbW1hc2VwaXRlbXJeAAAAcncAAAByTAEAANoUY29tbWFfc2VwYXJhdGVkX2xpc3RyggAAAHJgAAAAchIAAAByEgAAAHISAAAAchMAAAByjAAAAP4YAABzVAAAAAh/ABAEAggFCAUUAxoDFAMiAg4CIgIKAhQDFAUQAxQDGAMOAw4BFgMsAQYBDgEOARwDDgMCAQwYAgEMGA4DDgMOAxABDBIEAzgBCgEOAQYDEAMQAWMAAAAAAAAAAAAAAAACAAAAQAAAAHMcAAAAZQBaAWQAWgJkAWQChABaA2QDZASEAFoEZAVTACkG2hJfbGF6eWNsYXNzcHJvcGVydHljAgAAAAAAAAACAAAAAgAAAEMAAABzGgAAAHwBfABfAHwBagF8AF8BfAFqAnwAXwJkAFMAKQFOKQNyvQAAAHLfAAAAcg8AAAApAnLHAAAAcr0AAAByEgAAAHISAAAAchMAAAByyQAAACsaAABzBgAAAAABBgEIAXobX2xhenljbGFzc3Byb3BlcnR5Ll9faW5pdF9fYwMAAAAAAAAABAAAAAUAAAADAAAAc24AAACIAGQAawhyEHQAfAGDAYkAdAGIAGQBgwIMAHM8dAKHAGYBZAJkA4QIiABqA2QEZACFAhkARACDAYMBckJpAIgAXwR8AGoFagZ9A3wDiABqBGsHcmR8AGoFiACDAYgAagR8AzwAiABqBHwDGQBTACkFTtoHX2ludGVybmMBAAAAAAAAAAIAAAAGAAAAMwAAAHMgAAAAfABdGH0BiABqAHQBfAFkAGcAgwNrCFYAAQBxAmQBUwApAnK8AwAATikCcrwDAAByqgEAACkCchUAAABaCnN1cGVyY2xhc3MpAXLKAAAAchIAAAByEwAAAHKnAAAAMxoAAHMCAAAABAF6LV9sYXp5Y2xhc3Nwcm9wZXJ0eS5fX2dldF9fLjxsb2NhbHM+LjxnZW5leHByPnKUAAAAKQdy3QAAAHI1AQAAcnoBAADaB19fbXJvX19yvAMAAHK9AAAAcg8AAAApBHLHAAAAcqMAAAByygAAANoIYXR0cm5hbWVyEgAAACkBcsoAAAByEwAAANoHX19nZXRfXzAaAABzEgAAAAABCAEIARgBFAEGAQgBCgEQAXoaX2xhenljbGFzc3Byb3BlcnR5Ll9fZ2V0X19OKQVyDwAAAHIQAAAAchEAAAByyQAAAHK/AwAAchIAAAByEgAAAHISAAAAchMAAAByuwMAACoaAABzBAAAAAgBCAVyuwMAAGMAAAAAAAAAAAAAAAADAAAAQAAAAHNQAAAAZQBaAWQAWgJkAVoDZwBaBGUFZAJkA4QAgwFaBmUHZARkBYQAgwFaCGUHZAZkB4QAgwFaCWUHZAhkCYQAgwFaCmUHZApkC4QAgwFaC2QMUwApDXKOAAAAYdcBAAAKICAgIEEgc2V0IG9mIFVuaWNvZGUgY2hhcmFjdGVycywgZm9yIGxhbmd1YWdlLXNwZWNpZmljIHN0cmluZ3MgZm9yCiAgICBgYGFscGhhc2BgLCBgYG51bXNgYCwgYGBhbHBoYW51bXNgYCwgYW5kIGBgcHJpbnRhYmxlc2BgLgogICAgQSB1bmljb2RlX3NldCBpcyBkZWZpbmVkIGJ5IGEgbGlzdCBvZiByYW5nZXMgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyCiAgICBzZXQsIGluIGEgY2xhc3MgYXR0cmlidXRlIGBgX3Jhbmdlc2BgLCBzdWNoIGFzOjoKCiAgICAgICAgX3JhbmdlcyA9IFsoMHgwMDIwLCAweDAwN2UpLCAoMHgwMGEwLCAweDAwZmYpLF0KCiAgICBBIHVuaWNvZGUgc2V0IGNhbiBhbHNvIGJlIGRlZmluZWQgdXNpbmcgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugb2Ygb3RoZXIgdW5pY29kZSBzZXRzOjoKCiAgICAgICAgY2xhc3MgQ0pLKENoaW5lc2UsIEphcGFuZXNlLCBLb3JlYW4pOgogICAgICAgICAgICBwYXNzCiAgICBjAQAAAAAAAAAEAAAABwAAAEMAAABzYAAAAGcAfQF4RHwAagBEAF06fQJ8AnQBawhyGlAAeCp8AmoCRABdIH0DfAFqA3QEfANkARkAfANkBRkAZAIXAIMCgwEBAHEiVwBxDFcAZANkBIQAdAV0BnwBgwGDAUQAgwFTACkGTnIBAAAAcpQAAABjAQAAAAAAAAACAAAABAAAAFMAAABzFAAAAGcAfABdDH0BdAB8AYMBkQJxBFMAchIAAAApAXJJAwAAKQJyFQAAAHK5AAAAchIAAAByEgAAAHITAAAAchcAAABUGgAAcwIAAAAGAHo1dW5pY29kZV9zZXQuX2dldF9jaGFyc19mb3JfcmFuZ2VzLjxsb2NhbHM+LjxsaXN0Y29tcD5ylQAAACkHcr0DAAByjgAAANoHX3Jhbmdlc3JJAQAAciMBAAByeAEAAHLvAAAAKQRyygAAAHKkAAAA2gJjY1oCcnJyEgAAAHISAAAAchMAAADaFV9nZXRfY2hhcnNfZm9yX3Jhbmdlc0waAABzDgAAAAACBAEMAQgBAgEMASQBeiF1bmljb2RlX3NldC5fZ2V0X2NoYXJzX2Zvcl9yYW5nZXNjAQAAAAAAAAABAAAABAAAAEMAAABzFgAAAGQBagB0AXQCagN8AGoEgwCDAoMBUwApAnorYWxsIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhpcyByYW5nZXK2AAAAKQVy1gAAAHIHAAAAcpsAAABy0QIAAHLCAwAAKQFyygAAAHISAAAAchIAAAByEwAAAHJ0AAAAVhoAAHMCAAAAAAN6FnVuaWNvZGVfc2V0LnByaW50YWJsZXNjAQAAAAAAAAABAAAABAAAAEMAAABzFgAAAGQBagB0AXQCagN8AGoEgwCDAoMBUwApAnonYWxsIGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiB0aGlzIHJhbmdlcrYAAAApBXLWAAAA2gZmaWx0ZXJymwAAANoHaXNhbHBoYXLCAwAAKQFyygAAAHISAAAAchIAAAByEwAAAHJSAAAAWxoAAHMCAAAAAAN6EnVuaWNvZGVfc2V0LmFscGhhc2MBAAAAAAAAAAEAAAAEAAAAQwAAAHMWAAAAZAFqAHQBdAJqA3wAagSDAIMCgwFTACkCeiphbGwgbnVtZXJpYyBkaWdpdCBjaGFyYWN0ZXJzIGluIHRoaXMgcmFuZ2VytgAAACkFctYAAABywwMAAHKbAAAA2gdpc2RpZ2l0csIDAAApAXLKAAAAchIAAAByEgAAAHITAAAAcnAAAABgGgAAcwIAAAAAA3oQdW5pY29kZV9zZXQubnVtc2MBAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAfABqAHwAagEXAFMAKQF6KWFsbCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBpbiB0aGlzIHJhbmdlKQJyUgAAAHJwAAAAKQFyygAAAHISAAAAchIAAAByEwAAAHJRAAAAZRoAAHMCAAAAAAN6FXVuaWNvZGVfc2V0LmFscGhhbnVtc04pDHIPAAAAchAAAAByEQAAAHLfAAAAcsADAABy4AAAAHLCAwAAcrsDAABydAAAAHJSAAAAcnAAAAByUQAAAHISAAAAchIAAAByEgAAAHITAAAAco4AAAA8GgAAcw4AAAAIDQQBBAIMCgwFDAUMBWMAAAAAAAAAAAAAAAAGAAAAQAAAAHPwAAAAZQBaAWQAWgJkAVoDZAJlBGoFZgJnAVoGRwBkA2QEhABkBGUHgwNaCEcAZAVkBoQAZAZlB4MDWglHAGQHZAiEAGQIZQeDA1oKRwBkCWQKhABkCmUHgwNaC0cAZAtkDIQAZAxlB4MDWgxHAGQNZA6EAGQOZQeDA1oNRwBkD2QQhABkEGUHgwNaDkcAZBFkEoQAZBJlB4MDWg9HAGQTZBSEAGQUZQ1lDmUPgwVaEEcAZBVkFoQAZBZlB4MDWhFHAGQXZBiEAGQYZQeDA1oSRwBkGWQahABkGmUHgwNaE0cAZBtkHIQAZBxlB4MDWhRkHVMAKR5yjQAAAHpGCiAgICBBIG5hbWVzcGFjZSBjbGFzcyBmb3IgZGVmaW5pbmcgY29tbW9uIGxhbmd1YWdlIHVuaWNvZGVfc2V0cy4KICAgIOkgAAAAYwAAAAAAAAAAAAAAAAMAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkB2QIZwJaBGQGUwApCXoYcHlwYXJzaW5nX3VuaWNvZGUuTGF0aW4xei9Vbmljb2RlIHNldCBmb3IgTGF0aW4tMSBVbmljb2RlIENoYXJhY3RlciBSYW5nZXLGAwAA6X4AAADpoAAAAOn/AAAATikCcsYDAAByxwMAACkCcsgDAAByyQMAACkFcg8AAAByEAAAAHIRAAAAct8AAABywAMAAHISAAAAchIAAAByEgAAAHITAAAA2gZMYXRpbjFxGgAAcwQAAAAIAQQBcsoDAABjAAAAAAAAAAAAAAAAAgAAAEAAAABzFgAAAGUAWgFkAFoCZAFaA2QFZwFaBGQEUwApBnoYcHlwYXJzaW5nX3VuaWNvZGUuTGF0aW5Bei9Vbmljb2RlIHNldCBmb3IgTGF0aW4tQSBVbmljb2RlIENoYXJhY3RlciBSYW5nZekAAQAA6X8BAABOKQJyywMAAHLMAwAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaBkxhdGluQXUaAABzBAAAAAgBBAFyzQMAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMWAAAAZQBaAWQAWgJkAVoDZAVnAVoEZARTACkGehhweXBhcnNpbmdfdW5pY29kZS5MYXRpbkJ6L1VuaWNvZGUgc2V0IGZvciBMYXRpbi1CIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdl6YABAADpTwIAAE4pAnLOAwAAcs8DAAApBXIPAAAAchAAAAByEQAAAHLfAAAAcsADAAByEgAAAHISAAAAchIAAAByEwAAANoGTGF0aW5CeRoAAHMEAAAACAEEAXLQAwAAYwAAAAAAAAAAAAAAABIAAABAAAAAczYAAABlAFoBZABaAmQBWgNkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmQvZDBkMWQyZxFaBGQhUwApM3oXcHlwYXJzaW5nX3VuaWNvZGUuR3JlZWt6LlVuaWNvZGUgc2V0IGZvciBHcmVlayBVbmljb2RlIENoYXJhY3RlciBSYW5nZXPpcAMAAOn/AwAA6QAfAADpFR8AAOkYHwAA6R0fAADpIB8AAOlFHwAA6UgfAADpTR8AAOlQHwAA6VcfAADpWR8AAOlbHwAA6V0fAADpXx8AAOl9HwAA6YAfAADptB8AAOm2HwAA6cQfAADpxh8AAOnTHwAA6dYfAADp2x8AAOndHwAA6e8fAADp8h8AAOn0HwAA6fYfAADp/h8AAE4pAnLRAwAActIDAAApAnLTAwAActQDAAApAnLVAwAActYDAAApAnLXAwAActgDAAApAnLZAwAActoDAAApAnLbAwAActwDAAApAXLdAwAAKQFy3gMAACkBct8DAAApAnLgAwAAcuEDAAApAnLiAwAAcuMDAAApAnLkAwAAcuUDAAApAnLmAwAAcucDAAApAnLoAwAAcukDAAApAnLqAwAAcusDAAApAnLsAwAAcu0DAAApAnLuAwAAcu8DAAApBXIPAAAAchAAAAByEQAAAHLfAAAAcsADAAByEgAAAHISAAAAchIAAAByEwAAANoFR3JlZWt9GgAAcwgAAAAIAQQCCgEOAXLwAwAAYwAAAAAAAAAAAAAAAAIAAABAAAAAcxYAAABlAFoBZABaAmQBWgNkBWcBWgRkBFMAKQZ6GnB5cGFyc2luZ191bmljb2RlLkN5cmlsbGljejBVbmljb2RlIHNldCBmb3IgQ3lyaWxsaWMgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2XpAAQAAOn/BAAATikCcvEDAABy8gMAACkFcg8AAAByEAAAAHIRAAAAct8AAABywAMAAHISAAAAchIAAAByEgAAAHITAAAA2ghDeXJpbGxpY4UaAABzBAAAAAgBBAFy8wMAAGMAAAAAAAAAAAAAAAADAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAdkCGcCWgRkBlMAKQl6GXB5cGFyc2luZ191bmljb2RlLkNoaW5lc2V6L1VuaWNvZGUgc2V0IGZvciBDaGluZXNlIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdl6QBOAADp/58AAOkAMAAA6T8wAABOKQJy9AMAAHL1AwAAKQJy9gMAAHL3AwAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaB0NoaW5lc2WJGgAAcwQAAAAIAQQBcvgDAABjAAAAAAAAAAAAAAAABAAAAEAAAABzRAAAAGUAWgFkAFoCZAFaA2cAWgRHAGQCZAOEAGQDZQWDA1oGRwBkBGQFhABkBWUFgwNaB0cAZAZkB4QAZAdlBYMDWghkCFMAKQl6GnB5cGFyc2luZ191bmljb2RlLkphcGFuZXNlemBVbmljb2RlIHNldCBmb3IgSmFwYW5lc2UgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UsIGNvbWJpbmluZyBLYW5qaSwgSGlyYWdhbmEsIGFuZCBLYXRha2FuYSByYW5nZXNjAAAAAAAAAAAAAAAAAwAAAEAAAABzGAAAAGUAWgFkAFoCZAFaA2QHZAhnAloEZAZTACkJeiBweXBhcnNpbmdfdW5pY29kZS5KYXBhbmVzZS5LYW5qaXotVW5pY29kZSBzZXQgZm9yIEthbmppIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdl6QBOAADpv58AAOkAMAAA6T8wAABOKQJy+QMAAHL6AwAAKQJy+wMAAHL8AwAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaBUthbmppkRoAAHMEAAAACAEEAXL9AwAAYwAAAAAAAAAAAAAAAAIAAABAAAAAcxYAAABlAFoBZABaAmQBWgNkBWcBWgRkBFMAKQZ6I3B5cGFyc2luZ191bmljb2RlLkphcGFuZXNlLkhpcmFnYW5hejBVbmljb2RlIHNldCBmb3IgSGlyYWdhbmEgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2XpQDAAAOmfMAAATikCcv4DAABy/wMAACkFcg8AAAByEAAAAHIRAAAAct8AAABywAMAAHISAAAAchIAAAByEgAAAHITAAAA2ghIaXJhZ2FuYZUaAABzBAAAAAgBBAFyAAQAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMWAAAAZQBaAWQAWgJkAVoDZAVnAVoEZARTACkGeiNweXBhcnNpbmdfdW5pY29kZS5KYXBhbmVzZS5LYXRha2FuYXoxVW5pY29kZSBzZXQgZm9yIEthdGFrYW5hICBVbmljb2RlIENoYXJhY3RlciBSYW5nZemgMAAA6f8wAABOKQJyAQQAAHICBAAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaCEthdGFrYW5hmRoAAHMEAAAACAEEAXIDBAAATikJcg8AAAByEAAAAHIRAAAAct8AAABywAMAAHKOAAAAcv0DAAByAAQAAHIDBAAAchIAAAByEgAAAHISAAAAchMAAADaCEphcGFuZXNljRoAAHMKAAAACAEEAQQCEAQQBHIEBAAAYwAAAAAAAAAAAAAAAAcAAABAAAAAcyAAAABlAFoBZABaAmQBWgNkD2QQZBFkEmQTZBRnBloEZA5TACkVehhweXBhcnNpbmdfdW5pY29kZS5Lb3JlYW56LlVuaWNvZGUgc2V0IGZvciBLb3JlYW4gVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2XpAKwAAOmv1wAA6QARAADp/xEAAOkwMQAA6Y8xAADpYKkAAOl/qQAA6bDXAADp/9cAAOkAMAAA6T8wAABOKQJyBQQAAHIGBAAAKQJyBwQAAHIIBAAAKQJyCQQAAHIKBAAAKQJyCwQAAHIMBAAAKQJyDQQAAHIOBAAAKQJyDwQAAHIQBAAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaBktvcmVhbp0aAABzBAAAAAgBBAFyEQQAAGMAAAAAAAAAAAAAAAABAAAAQAAAAHMQAAAAZQBaAWQAWgJkAVoDZAJTACkDehVweXBhcnNpbmdfdW5pY29kZS5DSkt6VFVuaWNvZGUgc2V0IGZvciBjb21iaW5lZCBDaGluZXNlLCBKYXBhbmVzZSwgYW5kIEtvcmVhbiAoQ0pLKSBVbmljb2RlIENoYXJhY3RlciBSYW5nZU4pBHIPAAAAchAAAAByEQAAAHLfAAAAchIAAAByEgAAAHISAAAAchMAAADaA0NKS6EaAABzBAAAAAgBBAFyEgQAAGMAAAAAAAAAAAAAAAADAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAdkCGcCWgRkBlMAKQl6FnB5cGFyc2luZ191bmljb2RlLlRoYWl6LFVuaWNvZGUgc2V0IGZvciBUaGFpIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdl6QEOAADpOg4AAOk/DgAA6VsOAABOKQJyEwQAAHIUBAAAKQJyFQQAAHIWBAAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaBFRoYWmlGgAAcwQAAAAIAQQBchcEAABjAAAAAAAAAAAAAAAABAAAAEAAAABzGgAAAGUAWgFkAFoCZAFaA2QJZApkC2cDWgRkCFMAKQx6GHB5cGFyc2luZ191bmljb2RlLkFyYWJpY3ouVW5pY29kZSBzZXQgZm9yIEFyYWJpYyBVbmljb2RlIENoYXJhY3RlciBSYW5nZekABgAA6RsGAADpHgYAAOn/BgAA6QAHAADpfwcAAE4pAnIYBAAAchkEAAApAnIaBAAAchsEAAApAnIcBAAAch0EAAApBXIPAAAAchAAAAByEQAAAHLfAAAAcsADAAByEgAAAHISAAAAchIAAAByEwAAANoGQXJhYmljqRoAAHMEAAAACAEEAXIeBAAAYwAAAAAAAAAAAAAAAAIAAABAAAAAcxYAAABlAFoBZABaAmQBWgNkBWcBWgRkBFMAKQZ6GHB5cGFyc2luZ191bmljb2RlLkhlYnJld3ouVW5pY29kZSBzZXQgZm9yIEhlYnJldyBVbmljb2RlIENoYXJhY3RlciBSYW5nZemQBQAA6f8FAABOKQJyHwQAAHIgBAAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaBkhlYnJld60aAABzBAAAAAgBBAFyIQQAAGMAAAAAAAAAAAAAAAADAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAdkCGcCWgRkBlMAKQl6HHB5cGFyc2luZ191bmljb2RlLkRldmFuYWdhcml6MlVuaWNvZGUgc2V0IGZvciBEZXZhbmFnYXJpIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdl6QAJAADpfwkAAOngqAAA6f+oAABOKQJyIgQAAHIjBAAAKQJyJAQAAHIlBAAAKQVyDwAAAHIQAAAAchEAAABy3wAAAHLAAwAAchIAAAByEgAAAHISAAAAchMAAADaCkRldmFuYWdhcmmxGgAAcwQAAAAIAQQBciYEAABOKRVyDwAAAHIQAAAAchEAAABy3wAAAHKfAAAA2gptYXh1bmljb2RlcsADAAByjgAAAHLKAwAAcs0DAABy0AMAAHLwAwAAcvMDAABy+AMAAHIEBAAAchEEAAByEgQAAHIXBAAAch4EAAByIQQAAHImBAAAchIAAAByEgAAAHISAAAAchMAAAByjQAAAGsaAABzHgAAAAgDBAEMAhAEEAQQBBAIEAQQBBAQEAQUBBAEEAQQBHUOAAAA2KfZhNi52LHYqNmK2Kl1BgAAAOS4reaWh3USAAAA0LrQuNGA0LjQu9C70LjRhtCwdRAAAADOlc67zrvOt869zrnOus6sdQ4AAADXota015HXqNa015nXqnUJAAAA5pel5pys6KqedQYAAADmvKLlrZd1DAAAAOOCq+OCv+OCq+ODinUMAAAA44Gy44KJ44GM44GqdQkAAADtlZzqta3slrR1CQAAAOC5hOC4l+C4onUYAAAA4KSm4KWH4KS14KSo4KS+4KSX4KSw4KWAYwAAAAAAAAAAAAAAAAMAAABAAAAAcywAAABlAFoBZABaAmQBWgNHAGQCZAOEAGQDgwJaBEcAZARkBYQAZAWDAloFZAZTACkH2g5weXBhcnNpbmdfdGVzdHpCCiAgICBuYW1lc3BhY2UgY2xhc3MgZm9yIGNsYXNzZXMgdXNlZnVsIGluIHdyaXRpbmcgdW5pdCB0ZXN0cwogICAgYwAAAAAAAAAAAAAAAAIAAABAAAAAczgAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEZAWEAFoFZAZkB4QAWgZkCGQJhABaB2QKZAuEAFoIZAxTACkNeiZweXBhcnNpbmdfdGVzdC5yZXNldF9weXBhcnNpbmdfY29udGV4dGF4AwAACiAgICAgICAgQ29udGV4dCBtYW5hZ2VyIHRvIGJlIHVzZWQgd2hlbiB3cml0aW5nIHVuaXQgdGVzdHMgdGhhdCBtb2RpZnkgcHlwYXJzaW5nIGNvbmZpZyB2YWx1ZXM6CiAgICAgICAgIC0gcGFja3JhdCBwYXJzaW5nCiAgICAgICAgIC0gZGVmYXVsdCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCiAgICAgICAgIC0gZGVmYXVsdCBrZXl3b3JkIGNoYXJhY3RlcnMKICAgICAgICAgLSBsaXRlcmFsIHN0cmluZyBhdXRvLWNvbnZlcnNpb24gY2xhc3MKICAgICAgICAgLSBfX2RpYWdfXyBzZXR0aW5ncwoKICAgICAgICBFeGFtcGxlOgogICAgICAgICAgICB3aXRoIHJlc2V0X3B5cGFyc2luZ19jb250ZXh0KCk6CiAgICAgICAgICAgICAgICAjIHRlc3QgdGhhdCBsaXRlcmFscyB1c2VkIHRvIGNvbnN0cnVjdCBhIGdyYW1tYXIgYXJlIGF1dG9tYXRpY2FsbHkgc3VwcHJlc3NlZAogICAgICAgICAgICAgICAgUGFyc2VyRWxlbWVudC5pbmxpbmVMaXRlcmFsc1VzaW5nKFN1cHByZXNzKQoKICAgICAgICAgICAgICAgIHRlcm0gPSBXb3JkKGFscGhhcykgfCBXb3JkKG51bXMpCiAgICAgICAgICAgICAgICBncm91cCA9IEdyb3VwKCcoJyArIHRlcm1bLi4uXSArICcpJykKCiAgICAgICAgICAgICAgICAjIGFzc2VydCB0aGF0IHRoZSAnKCknIGNoYXJhY3RlcnMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGFyc2VkIHRva2VucwogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUFuZENoZWNrTGlzc3QoZ3JvdXAsICIo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BXwIfAx8DXwKcNZ8A2QKjQQBAHEqdAZkC2oHfAeDAYMBAQBxKlcAfABqCHwEfANkAWsJkAFyBHwDbgJkDGQNjQIBAGQBUwApD2FQAgAACiAgICAgICAgICAgIFVuaXQgdGVzdCBhc3NlcnRpb24gdG8gZXZhbHVhdGUgb3V0cHV0IG9mIFBhcnNlckVsZW1lbnQucnVuVGVzdHMoKS4gSWYgYSBsaXN0IG9mCiAgICAgICAgICAgIGxpc3QtZGljdCB0dXBsZXMgaXMgZ2l2ZW4gYXMgdGhlIGV4cGVjdGVkX3BhcnNlX3Jlc3VsdHMgYXJndW1lbnQsIHRoZW4gdGhlc2UgYXJlIHppcHBlZAogICAgICAgICAgICB3aXRoIHRoZSByZXBvcnQgdHVwbGVzIHJldHVybmVkIGJ5IHJ1blRlc3RzIGFuZCBldmFsdWF0ZWQgdXNpbmcgYXNzZXJ0UGFyc2VSZXN1bHRzRXF1YWxzLgogICAgICAgICAgICBGaW5hbGx5LCBhc3NlcnRzIHRoYXQgdGhlIG92ZXJhbGwgcnVuVGVzdHMoKSBzdWNjZXNzIHZhbHVlIGlzIFRydWUuCgogICAgICAgICAgICA6cGFyYW0gcnVuX3Rlc3RzX3JlcG9ydDogdHVwbGUoYm9vbCwgW3R1cGxlKHN0ciwgUGFyc2VSZXN1bHRzIG9yIEV4Y2VwdGlvbildKSByZXR1cm5lZCBmcm9tIHJ1blRlc3RzCiAgICAgICAgICAgIDpwYXJhbSBleHBlY3RlZF9wYXJzZV9yZXN1bHRzIChvcHRpb25hbCk6IFt0dXBsZShzdHIsIGxpc3QsIGRpY3QsIEV4Y2VwdGlvbildCiAgICAgICAgICAgIE5jAQAAAAAAAAADAAAABQAAAFMAAABzIgAAAGcAfABdGlwCfQF9AnwBZAAZAHwBZAEZAHwCZgORAnEEUwApAnIBAAAAcpQAAAByEgAAACkDchUAAABaA3JwdNoIZXhwZWN0ZWRyEgAAAHISAAAAchMAAAByFwAAAEkbAABzAgAAAAYBek9weXBhcnNpbmdfdGVzdC5UZXN0UGFyc2VSZXN1bHRzQXNzZXJ0cy5hc3NlcnRSdW5UZXN0UmVzdWx0cy48bG9jYWxzPi48bGlzdGNvbXA+YwEAAAAAAAAAAgAAAAQAAABz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ICAgICAgICMgbXVsdGlwbGUgdGFibGVzCiAgICAgICAgU2VsZWN0IEEsIEIsIEMgZnJvbSBTeXMuZHVhbCwgVGFibGUyCgogICAgICAgICMgaW52YWxpZCBTRUxFQ1Qga2V5d29yZCAtIHNob3VsZCBmYWlsCiAgICAgICAgWGVsZWN0IEEsIEIsIEMgZnJvbSBTeXMuZHVhbAoKICAgICAgICAjIGluY29tcGxldGUgY29tbWFuZCAtIHNob3VsZCBmYWlsCiAgICAgICAgU2VsZWN0CgogICAgICAgICMgaW52YWxpZCBjb2x1bW4gbmFtZSAtIHNob3VsZCBmYWlsCiAgICAgICAgU2VsZWN0IF5eXiBmcm94IFN5cy5kdWFsCgogICAgICAgIHpdCiAgICAgICAgMTAwCiAgICAgICAgLTEwMAogICAgICAgICsxMDAKICAgICAgICAzLjE0MTU5CiAgICAgICAgNi4wMmUyMwogICAgICAgIDFlLTEyCiAgICAgICAgeiAKICAgICAgICAxMDAKICAgICAgICBGRgogICAgICAgIHo2CiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgKQJORikBcpMAAAApAnIjAwAARikBTikDRlRGKQFUKQFytgAAACkBVCgQAQAAct8AAAByHgAAAHIfAAAAciAAAABytwAAANoHd2Vha3JlZnICAAAAch8BAAByTAEAAHKfAAAAcikCAABykAAAAHKnAgAAcgICAAByfAEAAHKcAQAAcvkBAAByAwAAANoIb3BlcmF0b3JyBAAAANoJaXRlcnRvb2xz2glmdW5jdG9vbHNyBQAAANoKY29udGV4dGxpYnIGAAAAcgcAAADaC0ltcG9ydEVycm9ycggAAADaB190aHJlYWRyCQAAANoJdGhyZWFkaW5n2g9jb2xsZWN0aW9ucy5hYmNyCgAAAHILAAAAcgwAAAByDQAAAHL+AQAAWgtvcmRlcmVkZGljdHIOAAAAciEAAABy3gIAAHIYAAAAchkAAAByGgAAAHIbAAAAchwAAAByygEAAHJUAgAAcjAEAAByHQAAAFoTZW5hYmxlX2FsbF93YXJuaW5nc9oHX19hbGxfX3IxAgAA2gx2ZXJzaW9uX2luZm9ymwEA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