{ "name": "HelloFactory", "structs": {}, "methods": [ { "name": "test_logicsig", "args": [], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_compile_contract", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_compile_contract_tmpl", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_compile_contract_prfx", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_compile_contract_large", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_arc4_create", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_arc4_create_tmpl", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_arc4_create_prfx", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_arc4_create_large", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_arc4_create_modified_compiled", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_arc4_update", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_other_constants", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_abi_call_create_params", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1750, 1758, 1766, 1774 ], "errorMessage": "application exists" }, { "pc": [ 697, 798, 1046, 1134, 1224, 1326, 1580, 1672, 1804, 1906, 1975, 2334, 2477 ], "errorMessage": "application log value is not the result of an ABI return" }, { "pc": [ 703, 804, 1052, 1231, 1333, 1587, 1811, 1913, 1982, 2341, 2484 ], "errorMessage": "invalid array length header" }, { "pc": [ 710, 811, 1059 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 1143 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 2347 ], "errorMessage": "invalid number of bytes for bytes" }, { "pc": [ 1237, 1339, 1593, 1817, 1919, 1988, 2490 ], "errorMessage": "invalid number of bytes for string" }, { "pc": [ 1681 ], "errorMessage": "invalid number of bytes for uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDYgMSAyCiAgICBieXRlY2Jsb2NrIGJhc2U2NChDNEVCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgMHgwMDA1Nzc2ZjcyNmM2NCBiYXNlNjQoQ3lBREFBSUJKZ0VJWjNKbFpYUnBibWN4R0VBQUJDaUFBR2N4RzBFQU80QUVKRGVOUERZYUFJNEJBQ1V4R1JSRU1SaEJBQTZBQk5DaWdnQTJHZ0NPQVFBMkFJQUVJTjg2VkRZYUFJNEJBQk1BTVJtQkJSSXhHQkJETVJtQkJCSXhHQkJETmhvQlNTSlpJd2hMQVJVU1JGY0NBQ2hNWnlSRE5ob0JTU0paSXdoTEFSVVNSRmNDQUNJb1pVU0FBU0JRVEZCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0NSRCkgMHg0YzVjNjFiYSAweDIwZGYzYTU0IDB4MDAwNTc0Njg2NTcyNjUgYmFzZTY0KEN5QUNBUUFtQWdobmNtVmxkR2x1WndSMGJYQnNNUmhBQUFNb0tXY3hHMEVBUFlBRUpEZU5QRFlhQUk0QkFDY3hHUlJFTVJoQkFBNkFCTkNpZ2dBMkdnQ09BUUFqQUlBRVRGeGh1allhQUk0QkFBRUFJa014R1lFRkVqRVlFRU14R1lFRUVqRVlFRU0yR2dGSkkxbUJBZ2hMQVJVU1JGY0NBQ01vWlVTQUFTQlFURkJKRlJaWEJnSk1VSUFFRlI5OGRVeFFzQ0pEKSAweDAwMDU2ODY1NmM2YzZmIGJhc2U2NChDekViUVFBNGdnSUVKRGVOUEFUMTVQMU5OaG9BamdJQUdnQUJBREVaRkRFWUVFU0FEQlVmZkhVQUFBQUFBQUFRQUxDQkFVTXhHWUVGRWpFWUVFTXhHUlF4R0JRUVF3PT0pIDB4ZjVlNGZkNGQgMHgwMDAzNjg2NTc5ICJoZXkgdGhlcmUiICJoaSB0aGVyZSIKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNQogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAyMAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4NjBmZmEyOTUgMHgyYTE3OTk1YyAweGViYTc0MmVhIDB4MzM1YTY0MzggMHgwMjk0N2NhMiAweGFlMWVlODQwIDB4N2I5MDczZjUgMHg4NTRhNjhjYSAweDFkYTAwNGExIDB4YzE5OTVhYmQgMHg3ZjRlNzVmNSAweDAxOTY1OTM3IDB4N2ZiZjhjY2EgLy8gbWV0aG9kICJ0ZXN0X2xvZ2ljc2lnKClhZGRyZXNzIiwgbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiLCBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF90bXBsKCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3RfcHJmeCgpdm9pZCIsIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2FyYzRfY3JlYXRlKCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2FyYzRfY3JlYXRlX3RtcGwoKXZvaWQiLCBtZXRob2QgInRlc3RfYXJjNF9jcmVhdGVfcHJmeCgpdm9pZCIsIG1ldGhvZCAidGVzdF9hcmM0X2NyZWF0ZV9sYXJnZSgpdm9pZCIsIG1ldGhvZCAidGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZCgpdm9pZCIsIG1ldGhvZCAidGVzdF9hcmM0X3VwZGF0ZSgpdm9pZCIsIG1ldGhvZCAidGVzdF9vdGhlcl9jb25zdGFudHMoKXZvaWQiLCBtZXRob2QgInRlc3RfYWJpX2NhbGxfY3JlYXRlX3BhcmFtcygpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdGVzdF9sb2dpY3NpZ19yb3V0ZUA0IHRlc3RfY29tcGlsZV9jb250cmFjdCB0ZXN0X2NvbXBpbGVfY29udHJhY3RfdG1wbCB0ZXN0X2NvbXBpbGVfY29udHJhY3RfcHJmeCB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UgdGVzdF9hcmM0X2NyZWF0ZSB0ZXN0X2FyYzRfY3JlYXRlX3RtcGwgdGVzdF9hcmM0X2NyZWF0ZV9wcmZ4IHRlc3RfYXJjNF9jcmVhdGVfbGFyZ2UgdGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZCB0ZXN0X2FyYzRfdXBkYXRlIHRlc3Rfb3RoZXJfY29uc3RhbnRzIHRlc3RfYWJpX2NhbGxfY3JlYXRlX3BhcmFtcwogICAgZXJyCgptYWluX3Rlc3RfbG9naWNzaWdfcm91dGVANDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyBiYXNlMzIoQ1VQWFk1UDdGNEEzVkRENlgzTENTWFNGN1BKVU9INVNaSDVQT1BKSFhEWVU1Q1JETUc2RDdYNE03RSkKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAyMDoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozNS00MQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZShzdHJpbmcpdm9pZCIpLCBhcmM0LlN0cmluZygiaGVsbG8iKSksCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPTEsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozOQogICAgLy8gZ2xvYmFsX251bV9ieXRlcz0xLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzItMzMKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gY29tcGlsZWQgPSBjb21waWxlX2NvbnRyYWN0KEhlbGxvKQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoQzRFQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjIDUgLy8gYmFzZTY0KEN5QURBQUlCSmdFSVozSmxaWFJwYm1jeEdFQUFCQ2lBQUdjeEcwRUFPNEFFSkRlTlBEWWFBSTRCQUNVeEdSUkVNUmhCQUE2QUJOQ2lnZ0EyR2dDT0FRQTJBSUFFSU44NlZEWWFBSTRCQUJNQU1SbUJCUkl4R0JCRE1SbUJCQkl4R0JCRE5ob0JTU0paSXdoTEFSVVNSRmNDQUNoTVp5UkROaG9CU1NKWkl3aExBUlVTUkZjQ0FDSW9aVVNBQVNCUVRGQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDUkQpCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzYKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoc3RyaW5nKXZvaWQiKSwgYXJjNC5TdHJpbmcoImhlbGxvIikpLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZShzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyAxMCAvLyAweDAwMDU2ODY1NmM2YzZmCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjM1CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozNS00MQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZShzdHJpbmcpdm9pZCIpLCBhcmM0LlN0cmluZygiaGVsbG8iKSksCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPTEsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzUtNDIKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoc3RyaW5nKXZvaWQiKSwgYXJjNC5TdHJpbmcoImhlbGxvIikpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz0xLAogICAgLy8gKQogICAgLy8gLnN1Ym1pdCgpCiAgICAvLyAuY3JlYXRlZF9hcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo0NS00OQogICAgLy8gIyBjYWxsIHRoZSBuZXcgYXBwCiAgICAvLyB0eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZ3JlZXQoc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygid29ybGQiKSksCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NDcKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJncmVldChzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJ3b3JsZCIpKSwKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDQgLy8gMHgwMDA1Nzc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo0NS00NgogICAgLy8gIyBjYWxsIHRoZSBuZXcgYXBwCiAgICAvLyB0eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo0NS00OQogICAgLy8gIyBjYWxsIHRoZSBuZXcgYXBwCiAgICAvLyB0eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZ3JlZXQoc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygid29ybGQiKSksCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo1MAogICAgLy8gcmVzdWx0ID0gYXJjNC5TdHJpbmcuZnJvbV9sb2codHhuLmxhc3RfbG9nKQogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjUyLTU3CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJkZWxldGUoKXZvaWQiKSwpLAogICAgLy8gICAgIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo1NgogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjU1CiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NTItNTMKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjUyLTU3CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJkZWxldGUoKXZvaWQiKSwpLAogICAgLy8gICAgIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NTkKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImhlbGxvIHdvcmxkIgogICAgcHVzaGJ5dGVzIDB4MDAwYjY4NjU2YzZjNmYyMDc3NmY3MjZjNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X3RtcGxbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfdG1wbDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo2Ny03NgogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX3VpbnQ9Y29tcGlsZWQuZ2xvYmFsX3VpbnRzLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9Y29tcGlsZWQuZ2xvYmFsX2J5dGVzLAogICAgLy8gICAgIGxvY2FsX251bV91aW50PWNvbXBpbGVkLmxvY2FsX3VpbnRzLAogICAgLy8gICAgIGxvY2FsX251bV9ieXRlcz1jb21waWxlZC5sb2NhbF9ieXRlcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjY1CiAgICAvLyBjb21waWxlZCA9IGNvbXBpbGVfY29udHJhY3QoSGVsbG9UbXBsLCB0ZW1wbGF0ZV92YXJzPXsiR1JFRVRJTkciOiBncmVldGluZ30pCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIGJ5dGVjXzAgLy8gYmFzZTY0KEM0RUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyA5IC8vIGJhc2U2NChDeUFDQVFBbUFnaG5jbVZsZEdsdVp3UjBiWEJzTVJoQUFBTW9LV2N4RzBFQVBZQUVKRGVOUERZYUFJNEJBQ2N4R1JSRU1SaEJBQTZBQk5DaWdnQTJHZ0NPQVFBakFJQUVURnhodWpZYUFJNEJBQUVBSWtNeEdZRUZFakVZRUVNeEdZRUVFakVZRUVNMkdnRkpJMW1CQWdoTEFSVVNSRmNDQUNNb1pVU0FBU0JRVEZCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0NKRCkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo2OAogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZSgpdm9pZCIpLCksCiAgICBieXRlYyA2IC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo2NwogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NjctNzYKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoKXZvaWQiKSwpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PWNvbXBpbGVkLmdsb2JhbF91aW50cywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICAgICBsb2NhbF9udW1fdWludD1jb21waWxlZC5sb2NhbF91aW50cywKICAgIC8vICAgICBsb2NhbF9udW1fYnl0ZXM9Y29tcGlsZWQubG9jYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NjctNzcKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoKXZvaWQiKSwpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PWNvbXBpbGVkLmdsb2JhbF91aW50cywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICAgICBsb2NhbF9udW1fdWludD1jb21waWxlZC5sb2NhbF91aW50cywKICAgIC8vICAgICBsb2NhbF9udW1fYnl0ZXM9Y29tcGlsZWQubG9jYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIC8vIC5jcmVhdGVkX2FwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjgwLTg0CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJncmVldChzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJ3b3JsZCIpKSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo4MgogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdyZWV0KHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIndvcmxkIikpLAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNCAvLyAweDAwMDU3NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjgwLTgxCiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjgwLTg0CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJncmVldChzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJ3b3JsZCIpKSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5Ojg1CiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZy5mcm9tX2xvZyh0eG4ubGFzdF9sb2cpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGV4dHJhY3QgNCAwCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6ODctOTIKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjkxCiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6OTAKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJkZWxldGUoKXZvaWQiKSwpLAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo4Ny04OAogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6ODctOTIKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo5NAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGV5IHdvcmxkIgogICAgcHVzaGJ5dGVzIDB4MDAwOTY4NjU3OTIwNzc2ZjcyNmM2NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuY29tcGlsZS5mYWN0b3J5LkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3RfcHJmeFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF9wcmZ4OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEwMy0xMDkKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoKXZvaWQiKSwpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo5OC0xMDEKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gY29tcGlsZWQgPSBjb21waWxlX2NvbnRyYWN0KAogICAgLy8gICAgIEhlbGxvUHJmeCwgdGVtcGxhdGVfdmFycz17IkdSRUVUSU5HIjogU3RyaW5nKCJoaSIpfSwgdGVtcGxhdGVfdmFyc19wcmVmaXg9IlBSRlhfIgogICAgLy8gKQogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICBieXRlY18wIC8vIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDeUFDQVFBbUFnaG5jbVZsZEdsdVp3Sm9hVEVZUUFBREtDbG5NUnRCQUQyQUJDUTNqVHcyR2dDT0FRQW5NUmtVUkRFWVFRQU9nQVRRb29JQU5ob0FqZ0VBSXdDQUJFeGNZYm8yR2dDT0FRQUJBQ0pETVJtQkJSSXhHQkJETVJtQkJCSXhHQkJETmhvQlNTTlpnUUlJU3dFVkVrUlhBZ0FqS0dWRWdBRWdVRXhRU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFpUXc9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMDQKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoKXZvaWQiKSwpLAogICAgYnl0ZWMgNiAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTAzCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMDMtMTA5CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiY3JlYXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9Y29tcGlsZWQuZ2xvYmFsX2J5dGVzLAogICAgLy8gKQogICAgLy8gLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEwMy0xMTAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoKXZvaWQiKSwpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIC8vIC5jcmVhdGVkX2FwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjExMy0xMTcKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdyZWV0KHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIndvcmxkIikpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjExNQogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdyZWV0KHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIndvcmxkIikpLAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNCAvLyAweDAwMDU3NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjExMy0xMTQKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTEzLTExNwogICAgLy8gIyBjYWxsIHRoZSBuZXcgYXBwCiAgICAvLyB0eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZ3JlZXQoc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygid29ybGQiKSksCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMTgKICAgIC8vIHJlc3VsdCA9IGFyYzQuU3RyaW5nLmZyb21fbG9nKHR4bi5sYXN0X2xvZykKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMjAtMTI1CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJkZWxldGUoKXZvaWQiKSwpLAogICAgLy8gICAgIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMjQKICAgIC8vIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMjMKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJkZWxldGUoKXZvaWQiKSwpLAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMjAtMTIxCiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMjAtMTI1CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJkZWxldGUoKXZvaWQiKSwpLAogICAgLy8gICAgIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTI3CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJoaSB3b3JsZCIKICAgIHB1c2hieXRlcyAweDAwMDg2ODY5MjA3NzZmNzI2YzY0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6OTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZToKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMzQtMTQwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9Y29tcGlsZWQuZXh0cmFfcHJvZ3JhbV9wYWdlcywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEzMS0xMzIKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gY29tcGlsZWQgPSBjb21waWxlX2NvbnRyYWN0KExhcmdlUHJvZ3JhbSkKICAgIGJ5dGVjXzAgLy8gYmFzZTY0KEM0RUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyAxMSAvLyBiYXNlNjQoQ3pFYlFRQTRnZ0lFSkRlTlBBVDE1UDFOTmhvQWpnSUFHZ0FCQURFWkZERVlFRVNBREJVZmZIVUFBQUFBQUFBUUFMQ0JBVU14R1lFRkVqRVlFRU14R1JReEdCUVFRdz09KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEzNAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTM0LTE0MAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPWNvbXBpbGVkLmV4dHJhX3Byb2dyYW1fcGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTM0LTE0MQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPWNvbXBpbGVkLmV4dHJhX3Byb2dyYW1fcGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIC8vIC5jcmVhdGVkX2FwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE0NC0xNDgKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdldF9iaWdfYnl0ZXNfbGVuZ3RoKCl1aW50NjQiKSwpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE0NgogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdldF9iaWdfYnl0ZXNfbGVuZ3RoKCl1aW50NjQiKSwpLAogICAgYnl0ZWMgMTIgLy8gbWV0aG9kICJnZXRfYmlnX2J5dGVzX2xlbmd0aCgpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNDQtMTQ1CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE0NC0xNDgKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdldF9iaWdfYnl0ZXNfbGVuZ3RoKCl1aW50NjQiKSwpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTQ5CiAgICAvLyByZXN1bHQgPSBhcmM0LlVJbnQ2NC5mcm9tX2xvZyh0eG4ubGFzdF9sb2cpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGV4dHJhY3QgNCAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE1MS0xNTYKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE1NQogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE1NAogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICBieXRlY18yIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE1MS0xNTIKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE1MS0xNTYKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNTgKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gNDA5NgogICAgcHVzaGludCA0MDk2CiAgICBpdG9iCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9hcmM0X2NyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYXJjNF9jcmVhdGU6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTYyLTE2MwogICAgLy8gIyBjcmVhdGUgYXBwCiAgICAvLyBoZWxsb19hcHAgPSBhcmM0LmFyYzRfY3JlYXRlKEhlbGxvLmNyZWF0ZSwgImhlbGxvIikuY3JlYXRlZF9hcHAKICAgIGl0eG5fYmVnaW4KICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoQzRFQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjIDUgLy8gYmFzZTY0KEN5QURBQUlCSmdFSVozSmxaWFJwYm1jeEdFQUFCQ2lBQUdjeEcwRUFPNEFFSkRlTlBEWWFBSTRCQUNVeEdSUkVNUmhCQUE2QUJOQ2lnZ0EyR2dDT0FRQTJBSUFFSU44NlZEWWFBSTRCQUJNQU1SbUJCUkl4R0JCRE1SbUJCQkl4R0JCRE5ob0JTU0paSXdoTEFSVVNSRmNDQUNoTVp5UkROaG9CU1NKWkl3aExBUlVTUkZjQ0FDSW9aVVNBQVNCUVRGQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDUkQpCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyA3IC8vIG1ldGhvZCAiY3JlYXRlKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDEwIC8vIDB4MDAwNTY4NjU2YzZjNmYKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE2NS0xNjYKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChIZWxsby5ncmVldCwgIndvcmxkIiwgYXBwX2lkPWhlbGxvX2FwcCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18zIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyA0IC8vIDB4MDAwNTc3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNjgtMTczCiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvLmRlbGV0ZSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgICMgb25fY29tcGxldGUgaXMgaW5mZXJyZWQgZnJvbSBIZWxsby5kZWxldGUgQVJDLTQgZGVmaW5pdGlvbgogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTcwCiAgICAvLyBIZWxsby5kZWxldGUsCiAgICBieXRlY18yIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNjgtMTczCiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvLmRlbGV0ZSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgICMgb25fY29tcGxldGUgaXMgaW5mZXJyZWQgZnJvbSBIZWxsby5kZWxldGUgQVJDLTQgZGVmaW5pdGlvbgogICAgLy8gKQogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNzUKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImhlbGxvIHdvcmxkIgogICAgcHVzaGJ5dGVzICJoZWxsbyB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfYXJjNF9jcmVhdGVfdG1wbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYXJjNF9jcmVhdGVfdG1wbDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxODEtMTg0CiAgICAvLyBoZWxsb19hcHAgPSBhcmM0LmFyYzRfY3JlYXRlKAogICAgLy8gICAgIEhlbGxvVG1wbC5jcmVhdGUsCiAgICAvLyAgICAgY29tcGlsZWQ9Y29tcGlsZWQsCiAgICAvLyApLmNyZWF0ZWRfYXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTc5LTE4MAogICAgLy8gIyBjcmVhdGUgYXBwCiAgICAvLyBjb21waWxlZCA9IGNvbXBpbGVfY29udHJhY3QoSGVsbG9UbXBsLCB0ZW1wbGF0ZV92YXJzPXsiR1JFRVRJTkciOiBTdHJpbmcoInRtcGwyIil9KQogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICBieXRlY18wIC8vIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgOSAvLyBiYXNlNjQoQ3lBQ0FRQW1BZ2huY21WbGRHbHVad1IwYlhCc01SaEFBQU1vS1djeEcwRUFQWUFFSkRlTlBEWWFBSTRCQUNjeEdSUkVNUmhCQUE2QUJOQ2lnZ0EyR2dDT0FRQWpBSUFFVEZ4aHVqWWFBSTRCQUFFQUlrTXhHWUVGRWpFWUVFTXhHWUVFRWpFWUVFTTJHZ0ZKSTFtQkFnaExBUlVTUkZjQ0FDTW9aVVNBQVNCUVRGQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDSkQpCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTgyCiAgICAvLyBIZWxsb1RtcGwuY3JlYXRlLAogICAgYnl0ZWMgNiAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTgxLTE4NAogICAgLy8gaGVsbG9fYXBwID0gYXJjNC5hcmM0X2NyZWF0ZSgKICAgIC8vICAgICBIZWxsb1RtcGwuY3JlYXRlLAogICAgLy8gICAgIGNvbXBpbGVkPWNvbXBpbGVkLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxODYtMTg3CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG9UbXBsLmdyZWV0LCAid29ybGQiLCBhcHBfaWQ9aGVsbG9fYXBwKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDQgLy8gMHgwMDA1Nzc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3Igc3RyaW5nCiAgICBleHRyYWN0IDYgMAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE4OS0xOTQKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSGVsbG9UbXBsLmRlbGV0ZSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgICMgb25fY29tcGxldGUgaXMgaW5mZXJyZWQgZnJvbSBIZWxsby5kZWxldGUgQVJDLTQgZGVmaW5pdGlvbgogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTkxCiAgICAvLyBIZWxsb1RtcGwuZGVsZXRlLAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTg5LTE5NAogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBIZWxsb1RtcGwuZGVsZXRlLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgIyBvbl9jb21wbGV0ZSBpcyBpbmZlcnJlZCBmcm9tIEhlbGxvLmRlbGV0ZSBBUkMtNCBkZWZpbml0aW9uCiAgICAvLyApCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE5NgogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAidG1wbDIgd29ybGQiCiAgICBwdXNoYnl0ZXMgInRtcGwyIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9hcmM0X2NyZWF0ZV9wcmZ4W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9hcmM0X2NyZWF0ZV9wcmZ4OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIwNC0yMDcKICAgIC8vIGhlbGxvX2FwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9QcmZ4LmNyZWF0ZSwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlZCwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMDAtMjAzCiAgICAvLyAjIGNyZWF0ZSBhcHAKICAgIC8vIGNvbXBpbGVkID0gY29tcGlsZV9jb250cmFjdCgKICAgIC8vICAgICBIZWxsb1ByZngsIHRlbXBsYXRlX3ZhcnNfcHJlZml4PSJQUkZYXyIsIHRlbXBsYXRlX3ZhcnM9eyJHUkVFVElORyI6IFN0cmluZygicHJmeDIiKX0KICAgIC8vICkKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoQzRFQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ3lBQ0FRQW1BZ2huY21WbGRHbHVad1Z3Y21aNE1qRVlRQUFES0Nsbk1SdEJBRDJBQkNRM2pUdzJHZ0NPQVFBbk1Sa1VSREVZUVFBT2dBVFFvb0lBTmhvQWpnRUFJd0NBQkV4Y1libzJHZ0NPQVFBQkFDSkRNUm1CQlJJeEdCQkRNUm1CQkJJeEdCQkROaG9CU1NOWmdRSUlTd0VWRWtSWEFnQWpLR1ZFZ0FFZ1VFeFFTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWlRdz09KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIwNQogICAgLy8gSGVsbG9QcmZ4LmNyZWF0ZSwKICAgIGJ5dGVjIDYgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIwNC0yMDcKICAgIC8vIGhlbGxvX2FwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9QcmZ4LmNyZWF0ZSwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlZCwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjA5LTIxMAogICAgLy8gIyBjYWxsIHRoZSBuZXcgYXBwCiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKEhlbGxvUHJmeC5ncmVldCwgIndvcmxkIiwgYXBwX2lkPWhlbGxvX2FwcCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18zIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyA0IC8vIDB4MDAwNTc3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMTItMjE3CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvUHJmeC5kZWxldGUsCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICAjIG9uX2NvbXBsZXRlIGlzIGluZmVycmVkIGZyb20gSGVsbG8uZGVsZXRlIEFSQy00IGRlZmluaXRpb24KICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIxNAogICAgLy8gSGVsbG9QcmZ4LmRlbGV0ZSwKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIxMi0yMTcKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSGVsbG9QcmZ4LmRlbGV0ZSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gICAgICMgb25fY29tcGxldGUgaXMgaW5mZXJyZWQgZnJvbSBIZWxsby5kZWxldGUgQVJDLTQgZGVmaW5pdGlvbgogICAgLy8gKQogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMTkKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gInByZngyIHdvcmxkIgogICAgcHVzaGJ5dGVzICJwcmZ4MiB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfYXJjNF9jcmVhdGVfbGFyZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2FyYzRfY3JlYXRlX2xhcmdlOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIyMy0yMjQKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gYXBwID0gYXJjNC5hcmM0X2NyZWF0ZShMYXJnZVByb2dyYW0pLmNyZWF0ZWRfYXBwCiAgICBpdHhuX2JlZ2luCiAgICBieXRlY18wIC8vIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgMTEgLy8gYmFzZTY0KEN6RWJRUUE0Z2dJRUpEZU5QQVQxNVAxTk5ob0FqZ0lBR2dBQkFERVpGREVZRUVTQURCVWZmSFVBQUFBQUFBQVFBTENCQVVNeEdZRUZFakVZRUVNeEdSUXhHQlFRUXc9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjI2LTIyNwogICAgLy8gIyBjYWxsIHRoZSBuZXcgYXBwCiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExhcmdlUHJvZ3JhbS5nZXRfYmlnX2J5dGVzX2xlbmd0aCwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlYyAxMiAvLyBtZXRob2QgImdldF9iaWdfYnl0ZXNfbGVuZ3RoKCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjI4CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09IDQwOTYKICAgIHB1c2hpbnQgNDA5NgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIzMC0yMzQKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTGFyZ2VQcm9ncmFtLmRlbGV0ZSwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjMyCiAgICAvLyBMYXJnZVByb2dyYW0uZGVsZXRlLAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjMwLTIzNAogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMYXJnZVByb2dyYW0uZGVsZXRlLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYXJjNF9jcmVhdGVfbW9kaWZpZWRfY29tcGlsZWQ6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjQ1LTI0OQogICAgLy8gYXBwID0gYXJjNC5hcmM0X2NyZWF0ZSgKICAgIC8vICAgICBIZWxsby5jcmVhdGUsCiAgICAvLyAgICAgU3RyaW5nKCJoZXkiKSwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlZCwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNDAKICAgIC8vIGxvY2FsX3VpbnRzPVVJbnQ2NCgzKSwKICAgIHB1c2hpbnQgMwogICAgaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNDIKICAgIC8vIGxvY2FsX2J5dGVzPVVJbnQ2NCg1KSwKICAgIHB1c2hpbnQgNQogICAgaXR4bl9maWVsZCBMb2NhbE51bUJ5dGVTbGljZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI0MQogICAgLy8gZ2xvYmFsX3VpbnRzPVVJbnQ2NCg0KSwKICAgIHB1c2hpbnQgNAogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjQzCiAgICAvLyBnbG9iYWxfYnl0ZXM9VUludDY0KDYpLAogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjM4CiAgICAvLyBjb21waWxlZCA9IGNvbXBpbGVfY29udHJhY3QoSGVsbG8pCiAgICBieXRlY18wIC8vIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNSAvLyBiYXNlNjQoQ3lBREFBSUJKZ0VJWjNKbFpYUnBibWN4R0VBQUJDaUFBR2N4RzBFQU80QUVKRGVOUERZYUFJNEJBQ1V4R1JSRU1SaEJBQTZBQk5DaWdnQTJHZ0NPQVFBMkFJQUVJTjg2VkRZYUFJNEJBQk1BTVJtQkJSSXhHQkJETVJtQkJCSXhHQkJETmhvQlNTSlpJd2hMQVJVU1JGY0NBQ2hNWnlSRE5ob0JTU0paSXdoTEFSVVNSRmNDQUNJb1pVU0FBU0JRVEZCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0NSRCkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNDYKICAgIC8vIEhlbGxvLmNyZWF0ZSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI0NwogICAgLy8gU3RyaW5nKCJoZXkiKSwKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMzY4NjU3OQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNDUtMjQ5CiAgICAvLyBhcHAgPSBhcmM0LmFyYzRfY3JlYXRlKAogICAgLy8gICAgIEhlbGxvLmNyZWF0ZSwKICAgIC8vICAgICBTdHJpbmcoImhleSIpLAogICAgLy8gICAgIGNvbXBpbGVkPWNvbXBpbGVkLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNTEKICAgIC8vIGFzc2VydCBhcHAubG9jYWxfbnVtX3VpbnQgPT0gMwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBMb2NhbE51bVVpbnQKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI1MgogICAgLy8gYXNzZXJ0IGFwcC5nbG9iYWxfbnVtX3VpbnQgPT0gNAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBHbG9iYWxOdW1VaW50CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNTMKICAgIC8vIGFzc2VydCBhcHAubG9jYWxfbnVtX2J5dGVzID09IDUKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwTG9jYWxOdW1CeXRlU2xpY2UKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI1NAogICAgLy8gYXNzZXJ0IGFwcC5nbG9iYWxfbnVtX2J5dGVzID09IDYKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpbnRjXzEgLy8gNgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI1NgogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChIZWxsby5ncmVldCwgInRoZXJlIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18zIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyA4IC8vIDB4MDAwNTc0Njg2NTcyNjUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNTgKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImhleSB0aGVyZSIKICAgIGJ5dGVjIDE0IC8vICJoZXkgdGhlcmUiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjYwLTI2MQogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gYXJjNC5hYmlfY2FsbChIZWxsby5kZWxldGUsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfYXJjNF91cGRhdGVbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2FyYzRfdXBkYXRlOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI2NS0yNzcKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gYXBwID0gYXJjNC5hcmM0X2NyZWF0ZSgKICAgIC8vICAgICBIZWxsb1RtcGwsCiAgICAvLyAgICAgY29tcGlsZWQ9Y29tcGlsZV9jb250cmFjdCgKICAgIC8vICAgICAgICAgSGVsbG9UbXBsLAogICAgLy8gICAgICAgICB0ZW1wbGF0ZV92YXJzPXsiR1JFRVRJTkciOiBTdHJpbmcoImhpIil9LAogICAgLy8gICAgICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPTEsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz0yLAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MiwKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9MiwKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9MiwKICAgIC8vICAgICApLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI3NQogICAgLy8gbG9jYWxfdWludHM9MiwKICAgIGludGNfMyAvLyAyCiAgICBpdHhuX2ZpZWxkIExvY2FsTnVtVWludAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI3NAogICAgLy8gbG9jYWxfYnl0ZXM9MiwKICAgIGludGNfMyAvLyAyCiAgICBpdHhuX2ZpZWxkIExvY2FsTnVtQnl0ZVNsaWNlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjcyCiAgICAvLyBnbG9iYWxfdWludHM9MiwKICAgIGludGNfMyAvLyAyCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNzMKICAgIC8vIGdsb2JhbF9ieXRlcz0yLAogICAgaW50Y18zIC8vIDIKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjcxCiAgICAvLyBleHRyYV9wcm9ncmFtX3BhZ2VzPTEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBFeHRyYVByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI2OC0yNzYKICAgIC8vIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoCiAgICAvLyAgICAgSGVsbG9UbXBsLAogICAgLy8gICAgIHRlbXBsYXRlX3ZhcnM9eyJHUkVFVElORyI6IFN0cmluZygiaGkiKX0sCiAgICAvLyAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz0xLAogICAgLy8gICAgIGdsb2JhbF91aW50cz0yLAogICAgLy8gICAgIGdsb2JhbF9ieXRlcz0yLAogICAgLy8gICAgIGxvY2FsX2J5dGVzPTIsCiAgICAvLyAgICAgbG9jYWxfdWludHM9MiwKICAgIC8vICksCiAgICBieXRlY18wIC8vIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgOSAvLyBiYXNlNjQoQ3lBQ0FRQW1BZ2huY21WbGRHbHVad1IwYlhCc01SaEFBQU1vS1djeEcwRUFQWUFFSkRlTlBEWWFBSTRCQUNjeEdSUkVNUmhCQUE2QUJOQ2lnZ0EyR2dDT0FRQWpBSUFFVEZ4aHVqWWFBSTRCQUFFQUlrTXhHWUVGRWpFWUVFTXhHWUVFRWpFWUVFTTJHZ0ZKSTFtQkFnaExBUlVTUkZjQ0FDTW9aVVNBQVNCUVRGQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDSkQpCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjY3CiAgICAvLyBIZWxsb1RtcGwsCiAgICBieXRlYyA2IC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNjUtMjc3CiAgICAvLyAjIGNyZWF0ZSBhcHAKICAgIC8vIGFwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9UbXBsLAogICAgLy8gICAgIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoCiAgICAvLyAgICAgICAgIEhlbGxvVG1wbCwKICAgIC8vICAgICAgICAgdGVtcGxhdGVfdmFycz17IkdSRUVUSU5HIjogU3RyaW5nKCJoaSIpfSwKICAgIC8vICAgICAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz0xLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9MiwKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTIsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPTIsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPTIsCiAgICAvLyAgICAgKSwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6Mjc5LTI4MAogICAgLy8gIyBjYWxsIHRoZSBuZXcgYXBwCiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKEhlbGxvVG1wbC5ncmVldCwgInRoZXJlIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18zIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyA4IC8vIDB4MDAwNTc0Njg2NTcyNjUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyODEKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImhpIHRoZXJlIgogICAgYnl0ZWMgMTUgLy8gImhpIHRoZXJlIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI4My0yODQKICAgIC8vICMgdXBkYXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYXJjNF91cGRhdGUoSGVsbG8sIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBieXRlY18wIC8vIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNSAvLyBiYXNlNjQoQ3lBREFBSUJKZ0VJWjNKbFpYUnBibWN4R0VBQUJDaUFBR2N4RzBFQU80QUVKRGVOUERZYUFJNEJBQ1V4R1JSRU1SaEJBQTZBQk5DaWdnQTJHZ0NPQVFBMkFJQUVJTjg2VkRZYUFJNEJBQk1BTVJtQkJSSXhHQkJETVJtQkJCSXhHQkJETmhvQlNTSlpJd2hMQVJVU1JGY0NBQ2hNWnlSRE5ob0JTU0paSXdoTEFSVVNSRmNDQUNJb1pVU0FBU0JRVEZCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0NSRCkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnRjXzEgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI4Ni0yODcKICAgIC8vICMgY2FsbCB0aGUgdXBkYXRlZCBhcHAKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG8uZ3JlZXQsICJ0aGVyZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI3OS0yODAKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChIZWxsb1RtcGwuZ3JlZXQsICJ0aGVyZSIsIGFwcF9pZD1hcHApCiAgICBieXRlYyA4IC8vIDB4MDAwNTc0Njg2NTcyNjUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6Mjg2LTI4NwogICAgLy8gIyBjYWxsIHRoZSB1cGRhdGVkIGFwcAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChIZWxsby5ncmVldCwgInRoZXJlIiwgYXBwX2lkPWFwcCkKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3Igc3RyaW5nCiAgICBleHRyYWN0IDYgMAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI4OAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGkgdGhlcmUiCiAgICBieXRlYyAxNSAvLyAiaGkgdGhlcmUiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjkwLTI5NQogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBIZWxsby5kZWxldGUsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICAgICAjIG9uX2NvbXBsZXRlIGlzIGluZmVycmVkIGZyb20gSGVsbG8uZGVsZXRlIEFSQy00IGRlZmluaXRpb24KICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI5MgogICAgLy8gSGVsbG8uZGVsZXRlLAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjkwLTI5NQogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBIZWxsby5kZWxldGUsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICAgICAjIG9uX2NvbXBsZXRlIGlzIGluZmVycmVkIGZyb20gSGVsbG8uZGVsZXRlIEFSQy00IGRlZmluaXRpb24KICAgIC8vICkKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuY29tcGlsZS5mYWN0b3J5LkhlbGxvRmFjdG9yeS50ZXN0X290aGVyX2NvbnN0YW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3Rfb3RoZXJfY29uc3RhbnRzOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI5OS0zMTIKICAgIC8vIGFwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9PdGhlckNvbnN0YW50cywKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlX2NvbnRyYWN0KAogICAgLy8gICAgICAgICBIZWxsb090aGVyQ29uc3RhbnRzLAogICAgLy8gICAgICAgICB0ZW1wbGF0ZV92YXJzPXsKICAgIC8vICAgICAgICAgICAgICJOVU0iOiBCaWdVSW50KDUpLAogICAgLy8gICAgICAgICAgICAgIkdSRUVUSU5HIjogU3RyaW5nKCJoZWxsbyIpLAogICAgLy8gICAgICAgICAgICAgIkFDQ09VTlQiOiBBY2NvdW50KAogICAgLy8gICAgICAgICAgICAgICAgICJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWTVIRktRIgogICAgLy8gICAgICAgICAgICAgKSwKICAgIC8vICAgICAgICAgICAgICJNRVRIT0QiOiBhcmM0LmFyYzRfc2lnbmF0dXJlKCJzb21ldGhpbmcoKXZvaWQiKSwKICAgIC8vICAgICAgICAgfSwKICAgIC8vICAgICApLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMwMS0zMTEKICAgIC8vIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoCiAgICAvLyAgICAgSGVsbG9PdGhlckNvbnN0YW50cywKICAgIC8vICAgICB0ZW1wbGF0ZV92YXJzPXsKICAgIC8vICAgICAgICAgIk5VTSI6IEJpZ1VJbnQoNSksCiAgICAvLyAgICAgICAgICJHUkVFVElORyI6IFN0cmluZygiaGVsbG8iKSwKICAgIC8vICAgICAgICAgIkFDQ09VTlQiOiBBY2NvdW50KAogICAgLy8gICAgICAgICAgICAgIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZNUhGS1EiCiAgICAvLyAgICAgICAgICksCiAgICAvLyAgICAgICAgICJNRVRIT0QiOiBhcmM0LmFyYzRfc2lnbmF0dXJlKCJzb21ldGhpbmcoKXZvaWQiKSwKICAgIC8vICAgICB9LAogICAgLy8gKSwKICAgIHB1c2hpbnQgNAogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIGJ5dGVjXzAgLy8gYmFzZTY0KEM0RUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KEN5QUNBQUVtQ0FobmNtVmxkR2x1WndOdWRXMEhZV1JrY21WemN3WnRaWFJvYjJRRWRHMXdiQUZDSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBeEdFQUFFQ2duQkdjcEp3Vm5LaWNHWnlzbkIyZUFCQ1EzalR3MkdnQ09BUUEyTVJrVVJERVlRUUFPZ0FSYkRDTjFOaG9BamdFQUtRQ0FCTmtvV25RMkdnQ09BUUFCQUlBTUZSOThkUUFBQUFBQUFBQUJzQ05ETVJtQkJSSXhHQkJETmhvQlNTSlpnUUlJU3dFVkVrUlhBZ0FpS1dWRWdBRXdvRWtWSXdraldDSW9aVVNBQVNCUVR3SlFURkFpS21WRVVDSXJaVVJRU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqUXc9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMDAKICAgIC8vIEhlbGxvT3RoZXJDb25zdGFudHMsCiAgICBwdXNoYnl0ZXMgMHhkOTI4NWE3NCAvLyBtZXRob2QgImNyZWF0ZSgpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyOTktMzEyCiAgICAvLyBhcHAgPSBhcmM0LmFyYzRfY3JlYXRlKAogICAgLy8gICAgIEhlbGxvT3RoZXJDb25zdGFudHMsCiAgICAvLyAgICAgY29tcGlsZWQ9Y29tcGlsZV9jb250cmFjdCgKICAgIC8vICAgICAgICAgSGVsbG9PdGhlckNvbnN0YW50cywKICAgIC8vICAgICAgICAgdGVtcGxhdGVfdmFycz17CiAgICAvLyAgICAgICAgICAgICAiTlVNIjogQmlnVUludCg1KSwKICAgIC8vICAgICAgICAgICAgICJHUkVFVElORyI6IFN0cmluZygiaGVsbG8iKSwKICAgIC8vICAgICAgICAgICAgICJBQ0NPVU5UIjogQWNjb3VudCgKICAgIC8vICAgICAgICAgICAgICAgICAiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVk1SEZLUSIKICAgIC8vICAgICAgICAgICAgICksCiAgICAvLyAgICAgICAgICAgICAiTUVUSE9EIjogYXJjNC5hcmM0X3NpZ25hdHVyZSgic29tZXRoaW5nKCl2b2lkIiksCiAgICAvLyAgICAgICAgIH0sCiAgICAvLyAgICAgKSwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzE0CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKEhlbGxvT3RoZXJDb25zdGFudHMuZ3JlZXQsICJKb2hubnkiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hieXRlcyAweDViMGMyMzc1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKWJ5dGVbXSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoYnl0ZXMgMHgwMDA2NGE2ZjY4NmU2ZTc5CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBieXRlcwogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMTcKICAgIC8vIGIiaGVsbG8gSm9obm55NSIgKyBHbG9iYWwuemVyb19hZGRyZXNzLmJ5dGVzICsgYXJjNC5hcmM0X3NpZ25hdHVyZSgic29tZXRoaW5nKCl2b2lkIikKICAgIHB1c2hieXRlcyBiYXNlMzIoTkJTV1kzRFBFQkZHNjJET05aNFRLQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSURSVEtNUSkKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMTYtMzE3CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICgKICAgIC8vICAgICBiImhlbGxvIEpvaG5ueTUiICsgR2xvYmFsLnplcm9fYWRkcmVzcy5ieXRlcyArIGFyYzQuYXJjNF9zaWduYXR1cmUoInNvbWV0aGluZygpdm9pZCIpCiAgICA9PQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMxNi0zMTgKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gKAogICAgLy8gICAgIGIiaGVsbG8gSm9obm55NSIgKyBHbG9iYWwuemVyb19hZGRyZXNzLmJ5dGVzICsgYXJjNC5hcmM0X3NpZ25hdHVyZSgic29tZXRoaW5nKCl2b2lkIikKICAgIC8vICkKICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMyMC0zMjEKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYWJpX2NhbGwoSGVsbG9PdGhlckNvbnN0YW50cy5kZWxldGUsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfYWJpX2NhbGxfY3JlYXRlX3BhcmFtc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYWJpX2NhbGxfY3JlYXRlX3BhcmFtczoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMjYtMzM2CiAgICAvLyBhcHAgPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvLmNyZWF0ZSwKICAgIC8vICAgICBTdHJpbmcoImhleSIpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PWNvbXBpbGVkLmdsb2JhbF91aW50cywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICAgICBsb2NhbF9udW1fdWludD1jb21waWxlZC5sb2NhbF91aW50cywKICAgIC8vICAgICBsb2NhbF9udW1fYnl0ZXM9Y29tcGlsZWQubG9jYWxfYnl0ZXMsCiAgICAvLyAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz1jb21waWxlZC5leHRyYV9wcm9ncmFtX3BhZ2VzLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMyNQogICAgLy8gY29tcGlsZWQgPSBjb21waWxlX2NvbnRyYWN0KEhlbGxvKQogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICBieXRlY18wIC8vIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNSAvLyBiYXNlNjQoQ3lBREFBSUJKZ0VJWjNKbFpYUnBibWN4R0VBQUJDaUFBR2N4RzBFQU80QUVKRGVOUERZYUFJNEJBQ1V4R1JSRU1SaEJBQTZBQk5DaWdnQTJHZ0NPQVFBMkFJQUVJTjg2VkRZYUFJNEJBQk1BTVJtQkJSSXhHQkJETVJtQkJCSXhHQkJETmhvQlNTSlpJd2hMQVJVU1JGY0NBQ2hNWnlSRE5ob0JTU0paSXdoTEFSVVNSRmNDQUNJb1pVU0FBU0JRVEZCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0NSRCkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMjcKICAgIC8vIEhlbGxvLmNyZWF0ZSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMyOAogICAgLy8gU3RyaW5nKCJoZXkiKSwKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMzY4NjU3OQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMjYtMzM2CiAgICAvLyBhcHAgPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvLmNyZWF0ZSwKICAgIC8vICAgICBTdHJpbmcoImhleSIpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PWNvbXBpbGVkLmdsb2JhbF91aW50cywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICAgICBsb2NhbF9udW1fdWludD1jb21waWxlZC5sb2NhbF91aW50cywKICAgIC8vICAgICBsb2NhbF9udW1fYnl0ZXM9Y29tcGlsZWQubG9jYWxfYnl0ZXMsCiAgICAvLyAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz1jb21waWxlZC5leHRyYV9wcm9ncmFtX3BhZ2VzLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMzgKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG8uZ3JlZXQsICJ0aGVyZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgOCAvLyAweDAwMDU3NDY4NjU3MjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18xIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBzdHJpbmcKICAgIGV4dHJhY3QgNiAwCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzQwCiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJoZXkgdGhlcmUiCiAgICBieXRlYyAxNCAvLyAiaGV5IHRoZXJlIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjM0Mi0zNDMKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYWJpX2NhbGwoSGVsbG8uZGVsZXRlLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18yIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMSAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "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", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }