{ "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": [ 858, 948, 1186, 1263, 1348, 1435, 1675, 1756, 1875, 1966, 2022, 2364, 2492 ], "errorMessage": "ARC4 prefix is valid" }, { "pc": [ 600, 612, 624, 636, 648, 660, 672, 684, 696, 708, 720, 732, 744 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 1822, 1830, 1838, 1845 ], "errorMessage": "application exists" }, { "pc": [ 797 ], "errorMessage": "can only call when creating" }, { "pc": [ 603, 615, 627, 639, 651, 663, 675, 687, 699, 711, 723, 735, 747 ], "errorMessage": "can only call when not creating" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayA2IDAgMSA1CiAgICBieXRlY2Jsb2NrIGJhc2U2NChDb0VCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgMHgwMDA1Nzc2ZjcyNmM2NCBiYXNlNjQoQ2lBQ0FRQW1BUWhuY21WbGRHbHVaekVZUUFBRUtJQUFaekViUVFCZmdnTUVJTjg2VkFRa040MDhCTkNpZ2dBMkdnQ09Bd0F3QUNVQUFpTkRNUmtVUkRFWVJEWWFBVmNDQUlnQVNVa1ZGbGNHQWt4UWdBUVZIM3gxVEZDd0lrTXhHWUVGRWtReEdFUWlRekVaRkVReEdCUkVOaG9CVndJQWlBQVNJa09CQkRFWmpnRUFBMEwvc2pFWVJDSkRpZ0VBS0l2L1o0bUtBUUVqS0dWRWdBRWdVSXYvVUlrPSkgMHg0YzVjNjFiYSAweDIwZGYzYTU0IDB4MDAwNTc0Njg2NTcyNjUgYmFzZTY0KENpQUNBUUFtQWdobmNtVmxkR2x1WndSMGJYQnNNUmhBQUFNb0tXY3hHMEVBVm9JREJFeGNZYm9FSkRlTlBBVFFvb0lBTmhvQWpnTUFNQUFsQUFJalF6RVpGRVF4R0VRMkdnRlhBZ0NJQURoSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0NKRE1SbUJCUkpFTVJoRUlrTXhHUlJFTVJnVVJDSkRnUVF4R1k0QkFBTkMvN3N4R0VRaVE0b0JBU01vWlVTQUFTQlFpLzlRaVE9PSkgMHgwMDA1Njg2NTZjNmM2ZiBiYXNlNjQoQ2pFYlFRQTlnZ0lFOWVUOVRRUWtONDA4TmhvQWpnSUFEd0FEZ1FCRE1SbUJCUkpFTVJoRWdRRkRNUmtVUkRFWVJJQU1GUjk4ZFFBQUFBQUFBQkFBc0lFQlF6RVpRUC9UTVJnVVJJRUJRdz09KSAweGY1ZTRmZDRkIDB4MDAwMzY4NjU3OSAiaGV5IHRoZXJlIiAiaGkgdGhlcmUiCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjUKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE4CiAgICBwdXNoYnl0ZXNzIDB4NjBmZmEyOTUgMHgyYTE3OTk1YyAweGViYTc0MmVhIDB4MzM1YTY0MzggMHgwMjk0N2NhMiAweGFlMWVlODQwIDB4N2I5MDczZjUgMHg4NTRhNjhjYSAweDFkYTAwNGExIDB4YzE5OTVhYmQgMHg3ZjRlNzVmNSAweDAxOTY1OTM3IDB4N2ZiZjhjY2EgLy8gbWV0aG9kICJ0ZXN0X2xvZ2ljc2lnKClhZGRyZXNzIiwgbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiLCBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF90bXBsKCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3RfcHJmeCgpdm9pZCIsIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2FyYzRfY3JlYXRlKCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2FyYzRfY3JlYXRlX3RtcGwoKXZvaWQiLCBtZXRob2QgInRlc3RfYXJjNF9jcmVhdGVfcHJmeCgpdm9pZCIsIG1ldGhvZCAidGVzdF9hcmM0X2NyZWF0ZV9sYXJnZSgpdm9pZCIsIG1ldGhvZCAidGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZCgpdm9pZCIsIG1ldGhvZCAidGVzdF9hcmM0X3VwZGF0ZSgpdm9pZCIsIG1ldGhvZCAidGVzdF9vdGhlcl9jb25zdGFudHMoKXZvaWQiLCBtZXRob2QgInRlc3RfYWJpX2NhbGxfY3JlYXRlX3BhcmFtcygpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdGVzdF9sb2dpY3NpZ19yb3V0ZUAzIG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3JvdXRlQDQgbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfdG1wbF9yb3V0ZUA1IG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3ByZnhfcm91dGVANiBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9yb3V0ZUA3IG1haW5fdGVzdF9hcmM0X2NyZWF0ZV9yb3V0ZUA4IG1haW5fdGVzdF9hcmM0X2NyZWF0ZV90bXBsX3JvdXRlQDkgbWFpbl90ZXN0X2FyYzRfY3JlYXRlX3ByZnhfcm91dGVAMTAgbWFpbl90ZXN0X2FyYzRfY3JlYXRlX2xhcmdlX3JvdXRlQDExIG1haW5fdGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZF9yb3V0ZUAxMiBtYWluX3Rlc3RfYXJjNF91cGRhdGVfcm91dGVAMTMgbWFpbl90ZXN0X290aGVyX2NvbnN0YW50c19yb3V0ZUAxNCBtYWluX3Rlc3RfYWJpX2NhbGxfY3JlYXRlX3BhcmFtc19yb3V0ZUAxNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI1CiAgICAvLyBjbGFzcyBIZWxsb0ZhY3RvcnkoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fdGVzdF9hYmlfY2FsbF9jcmVhdGVfcGFyYW1zX3JvdXRlQDE1OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2FiaV9jYWxsX2NyZWF0ZV9wYXJhbXMKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9vdGhlcl9jb25zdGFudHNfcm91dGVAMTQ6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6Mjk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3Rfb3RoZXJfY29uc3RhbnRzCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX3Rlc3RfYXJjNF91cGRhdGVfcm91dGVAMTM6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfYXJjNF91cGRhdGUKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZF9yb3V0ZUAxMjoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZAogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl90ZXN0X2FyYzRfY3JlYXRlX2xhcmdlX3JvdXRlQDExOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2FyYzRfY3JlYXRlX2xhcmdlCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX3Rlc3RfYXJjNF9jcmVhdGVfcHJmeF9yb3V0ZUAxMDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9hcmM0X2NyZWF0ZV9wcmZ4CiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX3Rlc3RfYXJjNF9jcmVhdGVfdG1wbF9yb3V0ZUA5OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2FyYzRfY3JlYXRlX3RtcGwKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9hcmM0X2NyZWF0ZV9yb3V0ZUA4OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2FyYzRfY3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9yb3V0ZUA3OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3ByZnhfcm91dGVANjoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfcHJmeAogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfdG1wbF9yb3V0ZUA1OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdF90bXBsCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUA0OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdAogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl90ZXN0X2xvZ2ljc2lnX3JvdXRlQDM6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyBiYXNlMzIoQ1VQWFk1Tkc2TlpGREpNTVZBMzMzSklYVkgzUU9EWEVYQUZEUkQ3RUlZS0dXMjZVSE01NjJYSzQ0VSkKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTg6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjUKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0KCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjM1LTQxCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiY3JlYXRlKHN0cmluZyl2b2lkIiksIGFyYzQuU3RyaW5nKCJoZWxsbyIpKSwKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9MSwKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjM5CiAgICAvLyBnbG9iYWxfbnVtX2J5dGVzPTEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMi0zMwogICAgLy8gIyBjcmVhdGUgYXBwCiAgICAvLyBjb21waWxlZCA9IGNvbXBpbGVfY29udHJhY3QoSGVsbG8pCiAgICBieXRlY18wIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNSAvLyBiYXNlNjQoQ2lBQ0FRQW1BUWhuY21WbGRHbHVaekVZUUFBRUtJQUFaekViUVFCZmdnTUVJTjg2VkFRa040MDhCTkNpZ2dBMkdnQ09Bd0F3QUNVQUFpTkRNUmtVUkRFWVJEWWFBVmNDQUlnQVNVa1ZGbGNHQWt4UWdBUVZIM3gxVEZDd0lrTXhHWUVGRWtReEdFUWlRekVaRkVReEdCUkVOaG9CVndJQWlBQVNJa09CQkRFWmpnRUFBMEwvc2pFWVJDSkRpZ0VBS0l2L1o0bUtBUUVqS0dWRWdBRWdVSXYvVUlrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozNgogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZShzdHJpbmcpdm9pZCIpLCBhcmM0LlN0cmluZygiaGVsbG8iKSksCiAgICBieXRlYyA3IC8vIG1ldGhvZCAiY3JlYXRlKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDEwIC8vIDB4MDAwNTY4NjU2YzZjNmYKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzUKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjM1LTQxCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiY3JlYXRlKHN0cmluZyl2b2lkIiksIGFyYzQuU3RyaW5nKCJoZWxsbyIpKSwKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9MSwKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozNS00MgogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZShzdHJpbmcpdm9pZCIpLCBhcmM0LlN0cmluZygiaGVsbG8iKSksCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPTEsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIC8vIC5jcmVhdGVkX2FwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjQ1LTQ5CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJncmVldChzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJ3b3JsZCIpKSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo0NwogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdyZWV0KHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIndvcmxkIikpLAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNCAvLyAweDAwMDU3NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjQ1LTQ2CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjQ1LTQ5CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJncmVldChzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJ3b3JsZCIpKSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjUwCiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZy5mcm9tX2xvZyh0eG4ubGFzdF9sb2cpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NTItNTcKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjU2CiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NTUKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJkZWxldGUoKXZvaWQiKSwpLAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo1Mi01MwogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NTItNTcKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo1OQogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGVsbG8gd29ybGQiCiAgICBwdXNoYnl0ZXMgMHgwMDBiNjg2NTZjNmM2ZjIwNzc2ZjcyNmM2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF90bXBsKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3RtcGw6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6NjctNzYKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJjcmVhdGUoKXZvaWQiKSwpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PWNvbXBpbGVkLmdsb2JhbF91aW50cywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICAgICBsb2NhbF9udW1fdWludD1jb21waWxlZC5sb2NhbF91aW50cywKICAgIC8vICAgICBsb2NhbF9udW1fYnl0ZXM9Y29tcGlsZWQubG9jYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo2NQogICAgLy8gY29tcGlsZWQgPSBjb21waWxlX2NvbnRyYWN0KEhlbGxvVG1wbCwgdGVtcGxhdGVfdmFycz17IkdSRUVUSU5HIjogZ3JlZXRpbmd9KQogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICBieXRlY18wIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgOSAvLyBiYXNlNjQoQ2lBQ0FRQW1BZ2huY21WbGRHbHVad1IwYlhCc01SaEFBQU1vS1djeEcwRUFWb0lEQkV4Y1lib0VKRGVOUEFUUW9vSUFOaG9BamdNQU1BQWxBQUlqUXpFWkZFUXhHRVEyR2dGWEFnQ0lBRGhKRlJaWEJnSk1VSUFFRlI5OGRVeFFzQ0pETVJtQkJSSkVNUmhFSWtNeEdSUkVNUmdVUkNKRGdRUXhHWTRCQUFOQy83c3hHRVFpUTRvQkFTTW9aVVNBQVNCUWkvOVFpUT09KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjY4CiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiY3JlYXRlKCl2b2lkIiksKSwKICAgIGJ5dGVjIDYgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjY3CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo2Ny03NgogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX3VpbnQ9Y29tcGlsZWQuZ2xvYmFsX3VpbnRzLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9Y29tcGlsZWQuZ2xvYmFsX2J5dGVzLAogICAgLy8gICAgIGxvY2FsX251bV91aW50PWNvbXBpbGVkLmxvY2FsX3VpbnRzLAogICAgLy8gICAgIGxvY2FsX251bV9ieXRlcz1jb21waWxlZC5sb2NhbF9ieXRlcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo2Ny03NwogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX3VpbnQ9Y29tcGlsZWQuZ2xvYmFsX3VpbnRzLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9Y29tcGlsZWQuZ2xvYmFsX2J5dGVzLAogICAgLy8gICAgIGxvY2FsX251bV91aW50PWNvbXBpbGVkLmxvY2FsX3VpbnRzLAogICAgLy8gICAgIGxvY2FsX251bV9ieXRlcz1jb21waWxlZC5sb2NhbF9ieXRlcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgLy8gLmNyZWF0ZWRfYXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6ODAtODQKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdyZWV0KHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIndvcmxkIikpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjgyCiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZ3JlZXQoc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygid29ybGQiKSksCiAgICBieXRlY18zIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyA0IC8vIDB4MDAwNTc3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6ODAtODEKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6ODAtODQKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdyZWV0KHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIndvcmxkIikpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6ODUKICAgIC8vIHJlc3VsdCA9IGFyYzQuU3RyaW5nLmZyb21fbG9nKHR4bi5sYXN0X2xvZykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo4Ny05MgogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6OTEKICAgIC8vIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMyAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo5MAogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImRlbGV0ZSgpdm9pZCIpLCksCiAgICBieXRlY18yIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5Ojg3LTg4CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTo4Ny05MgogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5Ojk0CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJoZXkgd29ybGQiCiAgICBwdXNoYnl0ZXMgMHgwMDA5Njg2NTc5MjA3NzZmNzI2YzY0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X3ByZngoKSAtPiB2b2lkOgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfcHJmeDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMDMtMTA5CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiY3JlYXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9Y29tcGlsZWQuZ2xvYmFsX2J5dGVzLAogICAgLy8gKQogICAgLy8gLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6OTgtMTAxCiAgICAvLyAjIGNyZWF0ZSBhcHAKICAgIC8vIGNvbXBpbGVkID0gY29tcGlsZV9jb250cmFjdCgKICAgIC8vICAgICBIZWxsb1ByZngsIHRlbXBsYXRlX3ZhcnM9eyJHUkVFVElORyI6IFN0cmluZygiaGkiKX0sIHRlbXBsYXRlX3ZhcnNfcHJlZml4PSJQUkZYXyIKICAgIC8vICkKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FRQW1BZ2huY21WbGRHbHVad0pvYVRFWVFBQURLQ2xuTVJ0QkFGYUNBd1JNWEdHNkJDUTNqVHdFMEtLQ0FEWWFBSTREQURBQUpRQUNJME14R1JSRU1SaEVOaG9CVndJQWlBQTRTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWlRekVaZ1FVU1JERVlSQ0pETVJrVVJERVlGRVFpUTRFRU1SbU9BUUFEUXYrN01SaEVJa09LQVFFaktHVkVnQUVnVUl2L1VJaz0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTA0CiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiY3JlYXRlKCl2b2lkIiksKSwKICAgIGJ5dGVjIDYgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEwMwogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTAzLTEwOQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImNyZWF0ZSgpdm9pZCIpLCksCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMDMtMTEwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiY3JlYXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9Y29tcGlsZWQuZ2xvYmFsX2J5dGVzLAogICAgLy8gKQogICAgLy8gLnN1Ym1pdCgpCiAgICAvLyAuY3JlYXRlZF9hcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMTMtMTE3CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJncmVldChzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJ3b3JsZCIpKSwKICAgIC8vICAgICBhcHBfaWQ9aGVsbG9fYXBwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMTUKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJncmVldChzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJ3b3JsZCIpKSwKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDQgLy8gMHgwMDA1Nzc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMTMtMTE0CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjExMy0xMTcKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdyZWV0KHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIndvcmxkIikpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTE4CiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZy5mcm9tX2xvZyh0eG4ubGFzdF9sb2cpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTIwLTEyNQogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTI0CiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTIzCiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTIwLTEyMQogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTIwLTEyNQogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEyNwogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGkgd29ybGQiCiAgICBwdXNoYnl0ZXMgMHgwMDA4Njg2OTIwNzc2ZjcyNmM2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZSgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZToKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxMzQtMTQwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9Y29tcGlsZWQuZXh0cmFfcHJvZ3JhbV9wYWdlcywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEzMS0xMzIKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gY29tcGlsZWQgPSBjb21waWxlX2NvbnRyYWN0KExhcmdlUHJvZ3JhbSkKICAgIGJ5dGVjXzAgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyAxMSAvLyBiYXNlNjQoQ2pFYlFRQTlnZ0lFOWVUOVRRUWtONDA4TmhvQWpnSUFEd0FEZ1FCRE1SbUJCUkpFTVJoRWdRRkRNUmtVUkRFWVJJQU1GUjk4ZFFBQUFBQUFBQkFBc0lFQlF6RVpRUC9UTVJnVVJJRUJRdz09KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjEzNAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTM0LTE0MAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPWNvbXBpbGVkLmV4dHJhX3Byb2dyYW1fcGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTM0LTE0MQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPWNvbXBpbGVkLmV4dHJhX3Byb2dyYW1fcGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIC8vIC5jcmVhdGVkX2FwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE0NC0xNDgKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdldF9iaWdfYnl0ZXNfbGVuZ3RoKCl1aW50NjQiKSwpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE0NgogICAgLy8gYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdldF9iaWdfYnl0ZXNfbGVuZ3RoKCl1aW50NjQiKSwpLAogICAgYnl0ZWMgMTIgLy8gbWV0aG9kICJnZXRfYmlnX2J5dGVzX2xlbmd0aCgpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNDQtMTQ1CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHR4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE0NC0xNDgKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImdldF9iaWdfYnl0ZXNfbGVuZ3RoKCl1aW50NjQiKSwpLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTQ5CiAgICAvLyByZXN1bHQgPSBhcmM0LlVJbnQ2NC5mcm9tX2xvZyh0eG4ubGFzdF9sb2cpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTUxLTE1NgogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTU1CiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTU0CiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTUxLTE1MgogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTUxLTE1NgogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiZGVsZXRlKCl2b2lkIiksKSwKICAgIC8vICAgICBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE1OAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSA0MDk2CiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAxMDAwCiAgICBiPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfYXJjNF9jcmVhdGUoKSAtPiB2b2lkOgp0ZXN0X2FyYzRfY3JlYXRlOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE2Mi0xNjMKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gaGVsbG9fYXBwID0gYXJjNC5hcmM0X2NyZWF0ZShIZWxsby5jcmVhdGUsICJoZWxsbyIpLmNyZWF0ZWRfYXBwCiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIGJ5dGVjXzAgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyA1IC8vIGJhc2U2NChDaUFDQVFBbUFRaG5jbVZsZEdsdVp6RVlRQUFFS0lBQVp6RWJRUUJmZ2dNRUlOODZWQVFrTjQwOEJOQ2lnZ0EyR2dDT0F3QXdBQ1VBQWlORE1Sa1VSREVZUkRZYUFWY0NBSWdBU1VrVkZsY0dBa3hRZ0FRVkgzeDFURkN3SWtNeEdZRUZFa1F4R0VRaVF6RVpGRVF4R0JSRU5ob0JWd0lBaUFBU0lrT0JCREVaamdFQUEwTC9zakVZUkNKRGlnRUFLSXYvWjRtS0FRRWpLR1ZFZ0FFZ1VJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZShzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyAxMCAvLyAweDAwMDU2ODY1NmM2YzZmCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxNjUtMTY2CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG8uZ3JlZXQsICJ3b3JsZCIsIGFwcF9pZD1oZWxsb19hcHApCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNCAvLyAweDAwMDU3NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDYgMAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE2OC0xNzMKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSGVsbG8uZGVsZXRlLAogICAgLy8gICAgIGFwcF9pZD1oZWxsb19hcHAsCiAgICAvLyAgICAgIyBvbl9jb21wbGV0ZSBpcyBpbmZlcnJlZCBmcm9tIEhlbGxvLmRlbGV0ZSBBUkM0IGRlZmluaXRpb24KICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGludGNfMyAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE3NQogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGVsbG8gd29ybGQiCiAgICBwdXNoYnl0ZXMgImhlbGxvIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfYXJjNF9jcmVhdGVfdG1wbCgpIC0+IHZvaWQ6CnRlc3RfYXJjNF9jcmVhdGVfdG1wbDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxODEtMTg0CiAgICAvLyBoZWxsb19hcHAgPSBhcmM0LmFyYzRfY3JlYXRlKAogICAgLy8gICAgIEhlbGxvVG1wbC5jcmVhdGUsCiAgICAvLyAgICAgY29tcGlsZWQ9Y29tcGlsZWQsCiAgICAvLyApLmNyZWF0ZWRfYXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTc5LTE4MAogICAgLy8gIyBjcmVhdGUgYXBwCiAgICAvLyBjb21waWxlZCA9IGNvbXBpbGVfY29udHJhY3QoSGVsbG9UbXBsLCB0ZW1wbGF0ZV92YXJzPXsiR1JFRVRJTkciOiBTdHJpbmcoInRtcGwyIil9KQogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICBieXRlY18wIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgOSAvLyBiYXNlNjQoQ2lBQ0FRQW1BZ2huY21WbGRHbHVad1IwYlhCc01SaEFBQU1vS1djeEcwRUFWb0lEQkV4Y1lib0VKRGVOUEFUUW9vSUFOaG9BamdNQU1BQWxBQUlqUXpFWkZFUXhHRVEyR2dGWEFnQ0lBRGhKRlJaWEJnSk1VSUFFRlI5OGRVeFFzQ0pETVJtQkJSSkVNUmhFSWtNeEdSUkVNUmdVUkNKRGdRUXhHWTRCQUFOQy83c3hHRVFpUTRvQkFTTW9aVVNBQVNCUWkvOVFpUT09KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjE4MS0xODQKICAgIC8vIGhlbGxvX2FwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9UbXBsLmNyZWF0ZSwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlZCwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGJ5dGVjIDYgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxODYtMTg3CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG9UbXBsLmdyZWV0LCAid29ybGQiLCBhcHBfaWQ9aGVsbG9fYXBwKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDQgLy8gMHgwMDA1Nzc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToxODktMTk0CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvVG1wbC5kZWxldGUsCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICAjIG9uX2NvbXBsZXRlIGlzIGluZmVycmVkIGZyb20gSGVsbG8uZGVsZXRlIEFSQzQgZGVmaW5pdGlvbgogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgaW50Y18zIC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18yIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MTk2CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJ0bXBsMiB3b3JsZCIKICAgIHB1c2hieXRlcyAidG1wbDIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9hcmM0X2NyZWF0ZV9wcmZ4KCkgLT4gdm9pZDoKdGVzdF9hcmM0X2NyZWF0ZV9wcmZ4OgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIwNC0yMDcKICAgIC8vIGhlbGxvX2FwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9QcmZ4LmNyZWF0ZSwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlZCwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMDAtMjAzCiAgICAvLyAjIGNyZWF0ZSBhcHAKICAgIC8vIGNvbXBpbGVkID0gY29tcGlsZV9jb250cmFjdCgKICAgIC8vICAgICBIZWxsb1ByZngsIHRlbXBsYXRlX3ZhcnNfcHJlZml4PSJQUkZYXyIsIHRlbXBsYXRlX3ZhcnM9eyJHUkVFVElORyI6IFN0cmluZygicHJmeDIiKX0KICAgIC8vICkKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FRQW1BZ2huY21WbGRHbHVad1Z3Y21aNE1qRVlRQUFES0Nsbk1SdEJBRmFDQXdSTVhHRzZCQ1EzalR3RTBLS0NBRFlhQUk0REFEQUFKUUFDSTBNeEdSUkVNUmhFTmhvQlZ3SUFpQUE0U1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFpUXpFWmdRVVNSREVZUkNKRE1Sa1VSREVZRkVRaVE0RUVNUm1PQVFBRFF2KzdNUmhFSWtPS0FRRWpLR1ZFZ0FFZ1VJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjIwNC0yMDcKICAgIC8vIGhlbGxvX2FwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9QcmZ4LmNyZWF0ZSwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlZCwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGJ5dGVjIDYgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMDktMjEwCiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG9QcmZ4LmdyZWV0LCAid29ybGQiLCBhcHBfaWQ9aGVsbG9fYXBwKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDQgLy8gMHgwMDA1Nzc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMTItMjE3CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvUHJmeC5kZWxldGUsCiAgICAvLyAgICAgYXBwX2lkPWhlbGxvX2FwcCwKICAgIC8vICAgICAjIG9uX2NvbXBsZXRlIGlzIGluZmVycmVkIGZyb20gSGVsbG8uZGVsZXRlIEFSQzQgZGVmaW5pdGlvbgogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgaW50Y18zIC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18yIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjE5CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJwcmZ4MiB3b3JsZCIKICAgIHB1c2hieXRlcyAicHJmeDIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLmNvbXBpbGUuZmFjdG9yeS5IZWxsb0ZhY3RvcnkudGVzdF9hcmM0X2NyZWF0ZV9sYXJnZSgpIC0+IHZvaWQ6CnRlc3RfYXJjNF9jcmVhdGVfbGFyZ2U6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjIzLTIyNAogICAgLy8gIyBjcmVhdGUgYXBwCiAgICAvLyBhcHAgPSBhcmM0LmFyYzRfY3JlYXRlKExhcmdlUHJvZ3JhbSkuY3JlYXRlZF9hcHAKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGVjXzAgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyAxMSAvLyBiYXNlNjQoQ2pFYlFRQTlnZ0lFOWVUOVRRUWtONDA4TmhvQWpnSUFEd0FEZ1FCRE1SbUJCUkpFTVJoRWdRRkRNUmtVUkRFWVJJQU1GUjk4ZFFBQUFBQUFBQkFBc0lFQlF6RVpRUC9UTVJnVVJJRUJRdz09KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMjYtMjI3CiAgICAvLyAjIGNhbGwgdGhlIG5ldyBhcHAKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTGFyZ2VQcm9ncmFtLmdldF9iaWdfYnl0ZXNfbGVuZ3RoLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjIDEyIC8vIG1ldGhvZCAiZ2V0X2JpZ19ieXRlc19sZW5ndGgoKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBidG9pCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjI4CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09IDQwOTYKICAgIHB1c2hpbnQgNDA5NiAvLyA0MDk2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjMwLTIzNAogICAgLy8gIyBkZWxldGUgdGhlIGFwcAogICAgLy8gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMYXJnZVByb2dyYW0uZGVsZXRlLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzMgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMuY29tcGlsZS5mYWN0b3J5LkhlbGxvRmFjdG9yeS50ZXN0X2FyYzRfY3JlYXRlX21vZGlmaWVkX2NvbXBpbGVkKCkgLT4gdm9pZDoKdGVzdF9hcmM0X2NyZWF0ZV9tb2RpZmllZF9jb21waWxlZDoKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNDUtMjQ5CiAgICAvLyBhcHAgPSBhcmM0LmFyYzRfY3JlYXRlKAogICAgLy8gICAgIEhlbGxvLmNyZWF0ZSwKICAgIC8vICAgICBTdHJpbmcoImhleSIpLAogICAgLy8gICAgIGNvbXBpbGVkPWNvbXBpbGVkLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI0MAogICAgLy8gbG9jYWxfdWludHM9VUludDY0KDMpLAogICAgcHVzaGludCAzIC8vIDMKICAgIGl0eG5fZmllbGQgTG9jYWxOdW1VaW50CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjQyCiAgICAvLyBsb2NhbF9ieXRlcz1VSW50NjQoNSksCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBMb2NhbE51bUJ5dGVTbGljZQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI0MQogICAgLy8gZ2xvYmFsX3VpbnRzPVVJbnQ2NCg0KSwKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNDMKICAgIC8vIGdsb2JhbF9ieXRlcz1VSW50NjQoNiksCiAgICBpbnRjXzAgLy8gNgogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyMzgKICAgIC8vIGNvbXBpbGVkID0gY29tcGlsZV9jb250cmFjdChIZWxsbykKICAgIGJ5dGVjXzAgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyA1IC8vIGJhc2U2NChDaUFDQVFBbUFRaG5jbVZsZEdsdVp6RVlRQUFFS0lBQVp6RWJRUUJmZ2dNRUlOODZWQVFrTjQwOEJOQ2lnZ0EyR2dDT0F3QXdBQ1VBQWlORE1Sa1VSREVZUkRZYUFWY0NBSWdBU1VrVkZsY0dBa3hRZ0FRVkgzeDFURkN3SWtNeEdZRUZFa1F4R0VRaVF6RVpGRVF4R0JSRU5ob0JWd0lBaUFBU0lrT0JCREVaamdFQUEwTC9zakVZUkNKRGlnRUFLSXYvWjRtS0FRRWpLR1ZFZ0FFZ1VJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI0NS0yNDkKICAgIC8vIGFwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG8uY3JlYXRlLAogICAgLy8gICAgIFN0cmluZygiaGV5IiksCiAgICAvLyAgICAgY29tcGlsZWQ9Y29tcGlsZWQsCiAgICAvLyApLmNyZWF0ZWRfYXBwCiAgICBieXRlYyA3IC8vIG1ldGhvZCAiY3JlYXRlKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNDcKICAgIC8vIFN0cmluZygiaGV5IiksCiAgICBieXRlYyAxMyAvLyAweDAwMDM2ODY1NzkKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjQ1LTI0OQogICAgLy8gYXBwID0gYXJjNC5hcmM0X2NyZWF0ZSgKICAgIC8vICAgICBIZWxsby5jcmVhdGUsCiAgICAvLyAgICAgU3RyaW5nKCJoZXkiKSwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlZCwKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjUxCiAgICAvLyBhc3NlcnQgYXBwLmxvY2FsX251bV91aW50ID09IDMKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwTG9jYWxOdW1VaW50CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBwdXNoaW50IDMgLy8gMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI1MgogICAgLy8gYXNzZXJ0IGFwcC5nbG9iYWxfbnVtX3VpbnQgPT0gNAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBHbG9iYWxOdW1VaW50CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI1MwogICAgLy8gYXNzZXJ0IGFwcC5sb2NhbF9udW1fYnl0ZXMgPT0gNQogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBMb2NhbE51bUJ5dGVTbGljZQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgaW50Y18zIC8vIDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNTQKICAgIC8vIGFzc2VydCBhcHAuZ2xvYmFsX251bV9ieXRlcyA9PSA2CiAgICBkdXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEdsb2JhbE51bUJ5dGVTbGljZQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgaW50Y18wIC8vIDYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNTYKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG8uZ3JlZXQsICJ0aGVyZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgOCAvLyAweDAwMDU3NDY4NjU3MjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDYgMAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI1OAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGV5IHRoZXJlIgogICAgYnl0ZWMgMTQgLy8gImhleSB0aGVyZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNjAtMjYxCiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKEhlbGxvLmRlbGV0ZSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGludGNfMyAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy5jb21waWxlLmZhY3RvcnkuSGVsbG9GYWN0b3J5LnRlc3RfYXJjNF91cGRhdGUoKSAtPiB2b2lkOgp0ZXN0X2FyYzRfdXBkYXRlOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI2NS0yNzcKICAgIC8vICMgY3JlYXRlIGFwcAogICAgLy8gYXBwID0gYXJjNC5hcmM0X2NyZWF0ZSgKICAgIC8vICAgICBIZWxsb1RtcGwsCiAgICAvLyAgICAgY29tcGlsZWQ9Y29tcGlsZV9jb250cmFjdCgKICAgIC8vICAgICAgICAgSGVsbG9UbXBsLAogICAgLy8gICAgICAgICB0ZW1wbGF0ZV92YXJzPXsiR1JFRVRJTkciOiBTdHJpbmcoImhpIil9LAogICAgLy8gICAgICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPTEsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz0yLAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MiwKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9MiwKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9MiwKICAgIC8vICAgICApLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI3NQogICAgLy8gbG9jYWxfdWludHM9MiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIExvY2FsTnVtVWludAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI3NAogICAgLy8gbG9jYWxfYnl0ZXM9MiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIExvY2FsTnVtQnl0ZVNsaWNlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjcyCiAgICAvLyBnbG9iYWxfdWludHM9MiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyNzMKICAgIC8vIGdsb2JhbF9ieXRlcz0yLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjcxCiAgICAvLyBleHRyYV9wcm9ncmFtX3BhZ2VzPTEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBFeHRyYVByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI2OC0yNzYKICAgIC8vIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoCiAgICAvLyAgICAgSGVsbG9UbXBsLAogICAgLy8gICAgIHRlbXBsYXRlX3ZhcnM9eyJHUkVFVElORyI6IFN0cmluZygiaGkiKX0sCiAgICAvLyAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz0xLAogICAgLy8gICAgIGdsb2JhbF91aW50cz0yLAogICAgLy8gICAgIGdsb2JhbF9ieXRlcz0yLAogICAgLy8gICAgIGxvY2FsX2J5dGVzPTIsCiAgICAvLyAgICAgbG9jYWxfdWludHM9MiwKICAgIC8vICksCiAgICBieXRlY18wIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgOSAvLyBiYXNlNjQoQ2lBQ0FRQW1BZ2huY21WbGRHbHVad1IwYlhCc01SaEFBQU1vS1djeEcwRUFWb0lEQkV4Y1lib0VKRGVOUEFUUW9vSUFOaG9BamdNQU1BQWxBQUlqUXpFWkZFUXhHRVEyR2dGWEFnQ0lBRGhKRlJaWEJnSk1VSUFFRlI5OGRVeFFzQ0pETVJtQkJSSkVNUmhFSWtNeEdSUkVNUmdVUkNKRGdRUXhHWTRCQUFOQy83c3hHRVFpUTRvQkFTTW9aVVNBQVNCUWkvOVFpUT09KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI2NwogICAgLy8gSGVsbG9UbXBsLAogICAgYnl0ZWMgNiAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjY1LTI3NwogICAgLy8gIyBjcmVhdGUgYXBwCiAgICAvLyBhcHAgPSBhcmM0LmFyYzRfY3JlYXRlKAogICAgLy8gICAgIEhlbGxvVG1wbCwKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlX2NvbnRyYWN0KAogICAgLy8gICAgICAgICBIZWxsb1RtcGwsCiAgICAvLyAgICAgICAgIHRlbXBsYXRlX3ZhcnM9eyJHUkVFVElORyI6IFN0cmluZygiaGkiKX0sCiAgICAvLyAgICAgICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9MSwKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPTIsCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz0yLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz0yLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz0yLAogICAgLy8gICAgICksCiAgICAvLyApLmNyZWF0ZWRfYXBwCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI3OS0yODAKICAgIC8vICMgY2FsbCB0aGUgbmV3IGFwcAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChIZWxsb1RtcGwuZ3JlZXQsICJ0aGVyZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgOCAvLyAweDAwMDU3NDY4NjU3MjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDYgMAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI4MQogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGkgdGhlcmUiCiAgICBieXRlYyAxNSAvLyAiaGkgdGhlcmUiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MjgzLTI4NAogICAgLy8gIyB1cGRhdGUgdGhlIGFwcAogICAgLy8gYXJjNC5hcmM0X3VwZGF0ZShIZWxsbywgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGVjXzAgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyA1IC8vIGJhc2U2NChDaUFDQVFBbUFRaG5jbVZsZEdsdVp6RVlRQUFFS0lBQVp6RWJRUUJmZ2dNRUlOODZWQVFrTjQwOEJOQ2lnZ0EyR2dDT0F3QXdBQ1VBQWlORE1Sa1VSREVZUkRZYUFWY0NBSWdBU1VrVkZsY0dBa3hRZ0FRVkgzeDFURkN3SWtNeEdZRUZFa1F4R0VRaVF6RVpGRVF4R0JSRU5ob0JWd0lBaUFBU0lrT0JCREVaamdFQUEwTC9zakVZUkNKRGlnRUFLSXYvWjRtS0FRRWpLR1ZFZ0FFZ1VJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6Mjg2LTI4NwogICAgLy8gIyBjYWxsIHRoZSB1cGRhdGVkIGFwcAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChIZWxsby5ncmVldCwgInRoZXJlIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18zIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyA4IC8vIDB4MDAwNTc0Njg2NTcyNjUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgNiAwCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6Mjg4CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJoaSB0aGVyZSIKICAgIGJ5dGVjIDE1IC8vICJoaSB0aGVyZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weToyOTAtMjk1CiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvLmRlbGV0ZSwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gICAgICMgb25fY29tcGxldGUgaXMgaW5mZXJyZWQgZnJvbSBIZWxsby5kZWxldGUgQVJDNCBkZWZpbml0aW9uCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzMgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMuY29tcGlsZS5mYWN0b3J5LkhlbGxvRmFjdG9yeS50ZXN0X290aGVyX2NvbnN0YW50cygpIC0+IHZvaWQ6CnRlc3Rfb3RoZXJfY29uc3RhbnRzOgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjI5OS0zMTIKICAgIC8vIGFwcCA9IGFyYzQuYXJjNF9jcmVhdGUoCiAgICAvLyAgICAgSGVsbG9PdGhlckNvbnN0YW50cywKICAgIC8vICAgICBjb21waWxlZD1jb21waWxlX2NvbnRyYWN0KAogICAgLy8gICAgICAgICBIZWxsb090aGVyQ29uc3RhbnRzLAogICAgLy8gICAgICAgICB0ZW1wbGF0ZV92YXJzPXsKICAgIC8vICAgICAgICAgICAgICJOVU0iOiBCaWdVSW50KDUpLAogICAgLy8gICAgICAgICAgICAgIkdSRUVUSU5HIjogU3RyaW5nKCJoZWxsbyIpLAogICAgLy8gICAgICAgICAgICAgIkFDQ09VTlQiOiBBY2NvdW50KAogICAgLy8gICAgICAgICAgICAgICAgICJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWTVIRktRIgogICAgLy8gICAgICAgICAgICAgKSwKICAgIC8vICAgICAgICAgICAgICJNRVRIT0QiOiBhcmM0LmFyYzRfc2lnbmF0dXJlKCJzb21ldGhpbmcoKXZvaWQiKSwKICAgIC8vICAgICAgICAgfSwKICAgIC8vICAgICApLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaXR4bl9iZWdpbgogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMwMS0zMTEKICAgIC8vIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoCiAgICAvLyAgICAgSGVsbG9PdGhlckNvbnN0YW50cywKICAgIC8vICAgICB0ZW1wbGF0ZV92YXJzPXsKICAgIC8vICAgICAgICAgIk5VTSI6IEJpZ1VJbnQoNSksCiAgICAvLyAgICAgICAgICJHUkVFVElORyI6IFN0cmluZygiaGVsbG8iKSwKICAgIC8vICAgICAgICAgIkFDQ09VTlQiOiBBY2NvdW50KAogICAgLy8gICAgICAgICAgICAgIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZNUhGS1EiCiAgICAvLyAgICAgICAgICksCiAgICAvLyAgICAgICAgICJNRVRIT0QiOiBhcmM0LmFyYzRfc2lnbmF0dXJlKCJzb21ldGhpbmcoKXZvaWQiKSwKICAgIC8vICAgICB9LAogICAgLy8gKSwKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1DQWhuY21WbGRHbHVad051ZFcwSFlXUmtjbVZ6Y3dadFpYUm9iMlFFZEcxd2JBRkNJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUF4R0VBQUVDZ25CR2NwSndWbktpY0daeXNuQjJjeEcwRUFISUlEQk5rb1duUUVKRGVOUEFSYkRDTjFOaG9BamdNQU1BQWxBQUlpUXpFWkZFUXhHRVEyR2dGWEFnQ0lBRGRKRlJaWEJnSk1VSUFFRlI5OGRVeFFzQ05ETVJtQkJSSkVNUmhFSTBNeEdSUkVNUmdVUklBTUZSOThkUUFBQUFBQUFBQUJzQ05EaWdFQklpbGxSSUFCTUtCSkZTTUpJMWdpS0dWRWdBRWdVSXYvVUV4UUlpcGxSRkFpSzJWRVVJaz0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzAwCiAgICAvLyBIZWxsb090aGVyQ29uc3RhbnRzLAogICAgcHVzaGJ5dGVzIDB4ZDkyODVhNzQgLy8gbWV0aG9kICJjcmVhdGUoKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6Mjk5LTMxMgogICAgLy8gYXBwID0gYXJjNC5hcmM0X2NyZWF0ZSgKICAgIC8vICAgICBIZWxsb090aGVyQ29uc3RhbnRzLAogICAgLy8gICAgIGNvbXBpbGVkPWNvbXBpbGVfY29udHJhY3QoCiAgICAvLyAgICAgICAgIEhlbGxvT3RoZXJDb25zdGFudHMsCiAgICAvLyAgICAgICAgIHRlbXBsYXRlX3ZhcnM9ewogICAgLy8gICAgICAgICAgICAgIk5VTSI6IEJpZ1VJbnQoNSksCiAgICAvLyAgICAgICAgICAgICAiR1JFRVRJTkciOiBTdHJpbmcoImhlbGxvIiksCiAgICAvLyAgICAgICAgICAgICAiQUNDT1VOVCI6IEFjY291bnQoCiAgICAvLyAgICAgICAgICAgICAgICAgIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZNUhGS1EiCiAgICAvLyAgICAgICAgICAgICApLAogICAgLy8gICAgICAgICAgICAgIk1FVEhPRCI6IGFyYzQuYXJjNF9zaWduYXR1cmUoInNvbWV0aGluZygpdm9pZCIpLAogICAgLy8gICAgICAgICB9LAogICAgLy8gICAgICksCiAgICAvLyApLmNyZWF0ZWRfYXBwCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMxNAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChIZWxsb090aGVyQ29uc3RhbnRzLmdyZWV0LCAiSm9obm55IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoYnl0ZXMgMHg1YjBjMjM3NSAvLyBtZXRob2QgImdyZWV0KHN0cmluZylieXRlW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgcHVzaGJ5dGVzIDB4MDAwNjRhNmY2ODZlNmU3OQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMTcKICAgIC8vIGIiaGVsbG8gSm9obm55NSIgKyBHbG9iYWwuemVyb19hZGRyZXNzLmJ5dGVzICsgYXJjNC5hcmM0X3NpZ25hdHVyZSgic29tZXRoaW5nKCl2b2lkIikKICAgIHB1c2hieXRlcyBiYXNlMzIoTkJTV1kzRFBFQkZHNjJET05aNFRLQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSURSVEtNUSkKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMTYtMzE3CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICgKICAgIC8vICAgICBiImhlbGxvIEpvaG5ueTUiICsgR2xvYmFsLnplcm9fYWRkcmVzcy5ieXRlcyArIGFyYzQuYXJjNF9zaWduYXR1cmUoInNvbWV0aGluZygpdm9pZCIpCiAgICA9PQogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMxNi0zMTgKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gKAogICAgLy8gICAgIGIiaGVsbG8gSm9obm55NSIgKyBHbG9iYWwuemVyb19hZGRyZXNzLmJ5dGVzICsgYXJjNC5hcmM0X3NpZ25hdHVyZSgic29tZXRoaW5nKCl2b2lkIikKICAgIC8vICkKICAgIGFzc2VydAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMyMC0zMjEKICAgIC8vICMgZGVsZXRlIHRoZSBhcHAKICAgIC8vIGFyYzQuYWJpX2NhbGwoSGVsbG9PdGhlckNvbnN0YW50cy5kZWxldGUsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzMgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzIgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMuY29tcGlsZS5mYWN0b3J5LkhlbGxvRmFjdG9yeS50ZXN0X2FiaV9jYWxsX2NyZWF0ZV9wYXJhbXMoKSAtPiB2b2lkOgp0ZXN0X2FiaV9jYWxsX2NyZWF0ZV9wYXJhbXM6CiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzI2LTMzNgogICAgLy8gYXBwID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBIZWxsby5jcmVhdGUsCiAgICAvLyAgICAgU3RyaW5nKCJoZXkiKSwKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbF9udW1fdWludD1jb21waWxlZC5nbG9iYWxfdWludHMsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyAgICAgbG9jYWxfbnVtX3VpbnQ9Y29tcGlsZWQubG9jYWxfdWludHMsCiAgICAvLyAgICAgbG9jYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmxvY2FsX2J5dGVzLAogICAgLy8gICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9Y29tcGlsZWQuZXh0cmFfcHJvZ3JhbV9wYWdlcywKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMjUKICAgIC8vIGNvbXBpbGVkID0gY29tcGlsZV9jb250cmFjdChIZWxsbykKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgYnl0ZWNfMCAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjIDUgLy8gYmFzZTY0KENpQUNBUUFtQVFobmNtVmxkR2x1WnpFWVFBQUVLSUFBWnpFYlFRQmZnZ01FSU44NlZBUWtONDA4Qk5DaWdnQTJHZ0NPQXdBd0FDVUFBaU5ETVJrVVJERVlSRFlhQVZjQ0FJZ0FTVWtWRmxjR0FreFFnQVFWSDN4MVRGQ3dJa014R1lFRkVrUXhHRVFpUXpFWkZFUXhHQlJFTmhvQlZ3SUFpQUFTSWtPQkJERVpqZ0VBQTBML3NqRVlSQ0pEaWdFQUtJdi9aNG1LQVFFaktHVkVnQUVnVUl2L1VJaz0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBjb21waWxlL2ZhY3RvcnkucHk6MzI2LTMzNgogICAgLy8gYXBwID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBIZWxsby5jcmVhdGUsCiAgICAvLyAgICAgU3RyaW5nKCJoZXkiKSwKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbF9udW1fdWludD1jb21waWxlZC5nbG9iYWxfdWludHMsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1jb21waWxlZC5nbG9iYWxfYnl0ZXMsCiAgICAvLyAgICAgbG9jYWxfbnVtX3VpbnQ9Y29tcGlsZWQubG9jYWxfdWludHMsCiAgICAvLyAgICAgbG9jYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmxvY2FsX2J5dGVzLAogICAgLy8gICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9Y29tcGlsZWQuZXh0cmFfcHJvZ3JhbV9wYWdlcywKICAgIC8vICkuY3JlYXRlZF9hcHAKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjMyOAogICAgLy8gU3RyaW5nKCJoZXkiKSwKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMzY4NjU3OQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMjYtMzM2CiAgICAvLyBhcHAgPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIEhlbGxvLmNyZWF0ZSwKICAgIC8vICAgICBTdHJpbmcoImhleSIpLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PWNvbXBpbGVkLmdsb2JhbF91aW50cywKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPWNvbXBpbGVkLmdsb2JhbF9ieXRlcywKICAgIC8vICAgICBsb2NhbF9udW1fdWludD1jb21waWxlZC5sb2NhbF91aW50cywKICAgIC8vICAgICBsb2NhbF9udW1fYnl0ZXM9Y29tcGlsZWQubG9jYWxfYnl0ZXMsCiAgICAvLyAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz1jb21waWxlZC5leHRyYV9wcm9ncmFtX3BhZ2VzLAogICAgLy8gKS5jcmVhdGVkX2FwcAogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozMzgKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoSGVsbG8uZ3JlZXQsICJ0aGVyZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMyAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgOCAvLyAweDAwMDU3NDY4NjU3MjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDYgMAogICAgLy8gY29tcGlsZS9mYWN0b3J5LnB5OjM0MAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiaGV5IHRoZXJlIgogICAgYnl0ZWMgMTQgLy8gImhleSB0aGVyZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbXBpbGUvZmFjdG9yeS5weTozNDItMzQzCiAgICAvLyAjIGRlbGV0ZSB0aGUgYXBwCiAgICAvLyBhcmM0LmFiaV9jYWxsKEhlbGxvLmRlbGV0ZSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGludGNfMyAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWNfMiAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "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", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }