{ "name": "AfterlifeVault", "structs": { "VaultData": [ { "name": "is_active", "type": "bool" }, { "name": "is_unlocked", "type": "bool" }, { "name": "hospital_approved", "type": "bool" }, { "name": "gov_approved", "type": "bool" }, { "name": "verifier_approved", "type": "bool" }, { "name": "designated_hospital", "type": "address" }, { "name": "designated_gov", "type": "address" }, { "name": "designated_verifier", "type": "address" }, { "name": "beneficiaries", "type": "(address,uint64)[]" } ] }, "methods": [ { "name": "create_vault", "args": [ { "type": "address[]", "name": "heir_wallets" }, { "type": "uint64[]", "name": "percentages" }, { "type": "address", "name": "hospital" }, { "type": "address", "name": "gov" }, { "type": "address", "name": "verifier" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Initializes a new Afterlife Vault with multiple beneficiaries.", "events": [], "recommendations": {} }, { "name": "initiate_death", "args": [ { "type": "address", "name": "owner" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Hospital triggers the protocol (1/3).", "events": [], "recommendations": {} }, { "name": "approve_death", "args": [ { "type": "address", "name": "owner" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Gov or Verifier provides consensus (2/3 and 3/3).", "events": [], "recommendations": {} }, { "name": "cancel_death_protocol", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Owner's Dead Man Switch to cancel false alarm.", "events": [], "recommendations": {} }, { "name": "get_beneficiaries", "args": [ { "type": "address", "name": "owner" } ], "returns": { "type": "(address,uint64)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "View function for the frontend to retrieve the heirs array.", "events": [], "recommendations": {} }, { "name": "is_vault_unlocked", "args": [ { "type": "address", "name": "owner" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "View function to check unlock status.", "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": { "vaults": { "keyType": "address", "valueType": "VaultData", "prefix": "dmF1bHRz" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 168 ], "errorMessage": "Arrays length mismatch" }, { "pc": [ 209 ], "errorMessage": "Percentages must equal 100" }, { "pc": [ 396 ], "errorMessage": "Protocol not initiated by hospital" }, { "pc": [ 421 ], "errorMessage": "Unauthorized: Not Gov or Verifier" }, { "pc": [ 345 ], "errorMessage": "Unauthorized: Not the designated hospital" }, { "pc": [ 539 ], "errorMessage": "Vault already permanently unlocked" }, { "pc": [ 336, 386, 528 ], "errorMessage": "Vault is not active" }, { "pc": [ 371, 512, 570 ], "errorMessage": "check self.vaults entry exists" }, { "pc": [ 239, 252 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 100, 122 ], "errorMessage": "invalid array length header" }, { "pc": [ 113 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array>" }, { "pc": [ 136 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 146, 156, 166, 318, 361, 565, 592 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 259 ], "errorMessage": "max array length exceeded" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgMgogICAgYnl0ZWNibG9jayAweDAwICJ2YXVsdHMiIDB4MTUxZjdjNzUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MzAtMzEKICAgIC8vICMgMy4gVGhlIE1haW4gQ29udHJhY3QKICAgIC8vIGNsYXNzIEFmdGVybGlmZVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxNQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4NTkzMGQwNWYgMHg0NjhkYWEzZSAweDI5YWE5ODI5IDB4ZTU0YmQzZjEgMHg1OTkzMjVhYyAweGI0ODRiZTVkIC8vIG1ldGhvZCAiY3JlYXRlX3ZhdWx0KGFkZHJlc3NbXSx1aW50NjRbXSxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJpbml0aWF0ZV9kZWF0aChhZGRyZXNzKXZvaWQiLCBtZXRob2QgImFwcHJvdmVfZGVhdGgoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjYW5jZWxfZGVhdGhfcHJvdG9jb2woKXZvaWQiLCBtZXRob2QgImdldF9iZW5lZmljaWFyaWVzKGFkZHJlc3MpKGFkZHJlc3MsdWludDY0KVtdIiwgbWV0aG9kICJpc192YXVsdF91bmxvY2tlZChhZGRyZXNzKWJvb2wiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVfdmF1bHQgaW5pdGlhdGVfZGVhdGggYXBwcm92ZV9kZWF0aCBjYW5jZWxfZGVhdGhfcHJvdG9jb2wgZ2V0X2JlbmVmaWNpYXJpZXMgaXNfdmF1bHRfdW5sb2NrZWQKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxNToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFmdGVybGlmZV92YXVsdC5jb250cmFjdC5BZnRlcmxpZmVWYXVsdC5jcmVhdGVfdmF1bHRbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVfdmF1bHQ6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTozNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18yIC8vIDMyCiAgICAqCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgdW5jb3ZlciAyCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBwdXNoaW50IDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDY0PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo0NgogICAgLy8gYXNzZXJ0IGhlaXJfd2FsbGV0cy5sZW5ndGggPT0gcGVyY2VudGFnZXMubGVuZ3RoLCAiQXJyYXlzIGxlbmd0aCBtaXNtYXRjaCIKICAgID09CiAgICBhc3NlcnQgLy8gQXJyYXlzIGxlbmd0aCBtaXNtYXRjaAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo0OC00OQogICAgLy8gIyBWZXJpZnkgcGVyY2VudGFnZXMgZXF1YWwgMTAwCiAgICAvLyB0b3RhbF9wZXJjZW50YWdlID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo1MAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHBlcmNlbnRhZ2VzLmxlbmd0aCk6ICMgPC0tIENIQU5HRUQgVE8gVVJBTkdFCiAgICBkdXAKCmNyZWF0ZV92YXVsdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjUwCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UocGVyY2VudGFnZXMubGVuZ3RoKTogIyA8LS0gQ0hBTkdFRCBUTyBVUkFOR0UKICAgIGR1cAogICAgZGlnIDYKICAgIDwKICAgIGJ6IGNyZWF0ZV92YXVsdF9hZnRlcl9mb3JANQogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo1MQogICAgLy8gdG90YWxfcGVyY2VudGFnZSArPSBwZXJjZW50YWdlc1tpXS5uYXRpdmUKICAgIGRpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDMKICAgICsKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo1MAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHBlcmNlbnRhZ2VzLmxlbmd0aCk6ICMgPC0tIENIQU5HRUQgVE8gVVJBTkdFCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGNyZWF0ZV92YXVsdF9mb3JfaGVhZGVyQDIKCmNyZWF0ZV92YXVsdF9hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6NTIKICAgIC8vIGFzc2VydCB0b3RhbF9wZXJjZW50YWdlID09IDEwMCwgIlBlcmNlbnRhZ2VzIG11c3QgZXF1YWwgMTAwIgogICAgZGlnIDEKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgYXNzZXJ0IC8vIFBlcmNlbnRhZ2VzIG11c3QgZXF1YWwgMTAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjU0LTU1CiAgICAvLyAjIENvbnN0cnVjdCB0aGUgYmVuZWZpY2lhcmllcyBhcnJheQogICAgLy8gYmVuZWZpY2lhcnlfbGlzdCA9IGFyYzQuRHluYW1pY0FycmF5W0JlbmVmaWNpYXJ5VGFyZ2V0XSgpCiAgICBwdXNoYnl0ZXMgMHgwMDAwCiAgICBidXJ5IDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjU2CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoaGVpcl93YWxsZXRzLmxlbmd0aCk6ICMgPC0tIENIQU5HRUQgVE8gVVJBTkdFCiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxCgpjcmVhdGVfdmF1bHRfZm9yX2hlYWRlckA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo1NgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGhlaXJfd2FsbGV0cy5sZW5ndGgpOiAjIDwtLSBDSEFOR0VEIFRPIFVSQU5HRQogICAgZHVwCiAgICBkaWcgOAogICAgPAogICAgYnogY3JlYXRlX3ZhdWx0X2FmdGVyX2ZvckA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjU4CiAgICAvLyB3YWxsZXQ9aGVpcl93YWxsZXRzW2ldLAogICAgZGlnIDgKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjU5CiAgICAvLyBwZXJjZW50YWdlPXBlcmNlbnRhZ2VzW2ldCiAgICBkaWcgOAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAyCiAgICBwdXNoaW50IDgKICAgICoKICAgIHB1c2hpbnQgOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjU3LTYwCiAgICAvLyB0YXJnZXQgPSBCZW5lZmljaWFyeVRhcmdldCgKICAgIC8vICAgICB3YWxsZXQ9aGVpcl93YWxsZXRzW2ldLAogICAgLy8gICAgIHBlcmNlbnRhZ2U9cGVyY2VudGFnZXNbaV0KICAgIC8vICkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo2MQogICAgLy8gYmVuZWZpY2lhcnlfbGlzdC5hcHBlbmQodGFyZ2V0LmNvcHkoKSkKICAgIGRpZyAxMQogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6NTYKICAgIC8vIGZvciBpIGluIHVyYW5nZShoZWlyX3dhbGxldHMubGVuZ3RoKTogIyA8LS0gQ0hBTkdFRCBUTyBVUkFOR0UKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgY3JlYXRlX3ZhdWx0X2Zvcl9oZWFkZXJANgoKY3JlYXRlX3ZhdWx0X2FmdGVyX2ZvckA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo2My03NAogICAgLy8gIyBTYXZlIHRvIEJveCBTdG9yYWdlIChVc2VyJ3MgVmF1bHQpCiAgICAvLyBzZWxmLnZhdWx0c1tUeG4uc2VuZGVyXSA9IFZhdWx0RGF0YSgKICAgIC8vICAgICBpc19hY3RpdmU9YXJjNC5Cb29sKFRydWUpLAogICAgLy8gICAgIGlzX3VubG9ja2VkPWFyYzQuQm9vbChGYWxzZSksCiAgICAvLyAgICAgaG9zcGl0YWxfYXBwcm92ZWQ9YXJjNC5Cb29sKEZhbHNlKSwKICAgIC8vICAgICBnb3ZfYXBwcm92ZWQ9YXJjNC5Cb29sKEZhbHNlKSwKICAgIC8vICAgICB2ZXJpZmllcl9hcHByb3ZlZD1hcmM0LkJvb2woRmFsc2UpLAogICAgLy8gICAgIGRlc2lnbmF0ZWRfaG9zcGl0YWw9YXJjNC5BZGRyZXNzKGhvc3BpdGFsKSwKICAgIC8vICAgICBkZXNpZ25hdGVkX2dvdj1hcmM0LkFkZHJlc3MoZ292KSwKICAgIC8vICAgICBkZXNpZ25hdGVkX3ZlcmlmaWVyPWFyYzQuQWRkcmVzcyh2ZXJpZmllciksCiAgICAvLyAgICAgYmVuZWZpY2lhcmllcz1iZW5lZmljaWFyeV9saXN0LmNvcHkoKQogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4ODAKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwNjMKICAgIGNvbmNhdAogICAgZGlnIDEwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6NjMtNjQKICAgIC8vICMgU2F2ZSB0byBCb3ggU3RvcmFnZSAoVXNlcidzIFZhdWx0KQogICAgLy8gc2VsZi52YXVsdHNbVHhuLnNlbmRlcl0gPSBWYXVsdERhdGEoCiAgICBieXRlY18xIC8vICJ2YXVsdHMiCiAgICB0eG4gU2VuZGVyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6NjMtNzQKICAgIC8vICMgU2F2ZSB0byBCb3ggU3RvcmFnZSAoVXNlcidzIFZhdWx0KQogICAgLy8gc2VsZi52YXVsdHNbVHhuLnNlbmRlcl0gPSBWYXVsdERhdGEoCiAgICAvLyAgICAgaXNfYWN0aXZlPWFyYzQuQm9vbChUcnVlKSwKICAgIC8vICAgICBpc191bmxvY2tlZD1hcmM0LkJvb2woRmFsc2UpLAogICAgLy8gICAgIGhvc3BpdGFsX2FwcHJvdmVkPWFyYzQuQm9vbChGYWxzZSksCiAgICAvLyAgICAgZ292X2FwcHJvdmVkPWFyYzQuQm9vbChGYWxzZSksCiAgICAvLyAgICAgdmVyaWZpZXJfYXBwcm92ZWQ9YXJjNC5Cb29sKEZhbHNlKSwKICAgIC8vICAgICBkZXNpZ25hdGVkX2hvc3BpdGFsPWFyYzQuQWRkcmVzcyhob3NwaXRhbCksCiAgICAvLyAgICAgZGVzaWduYXRlZF9nb3Y9YXJjNC5BZGRyZXNzKGdvdiksCiAgICAvLyAgICAgZGVzaWduYXRlZF92ZXJpZmllcj1hcmM0LkFkZHJlc3ModmVyaWZpZXIpLAogICAgLy8gICAgIGJlbmVmaWNpYXJpZXM9YmVuZWZpY2lhcnlfbGlzdC5jb3B5KCkKICAgIC8vICkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWZ0ZXJsaWZlX3ZhdWx0LmNvbnRyYWN0LkFmdGVybGlmZVZhdWx0LmluaXRpYXRlX2RlYXRoW3JvdXRpbmddKCkgLT4gdm9pZDoKaW5pdGlhdGVfZGVhdGg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo3OQogICAgLy8gdmF1bHQgPSBzZWxmLnZhdWx0c1tvd25lcl0uY29weSgpCiAgICBieXRlY18xIC8vICJ2YXVsdHMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6NzktODAKICAgIC8vIHZhdWx0ID0gc2VsZi52YXVsdHNbb3duZXJdLmNvcHkoKQogICAgLy8gYXNzZXJ0IHZhdWx0LmlzX2FjdGl2ZS5uYXRpdmUsICJWYXVsdCBpcyBub3QgYWN0aXZlIgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCB2YXVsdC5pc19hY3RpdmUubmF0aXZlLCAiVmF1bHQgaXMgbm90IGFjdGl2ZSIKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gVmF1bHQgaXMgbm90IGFjdGl2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo4MQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gdmF1bHQuZGVzaWduYXRlZF9ob3NwaXRhbC5uYXRpdmUsICJVbmF1dGhvcml6ZWQ6IE5vdCB0aGUgZGVzaWduYXRlZCBob3NwaXRhbCIKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgPT0KICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQ6IE5vdCB0aGUgZGVzaWduYXRlZCBob3NwaXRhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo4My04NAogICAgLy8gdmF1bHQuaG9zcGl0YWxfYXBwcm92ZWQgPSBhcmM0LkJvb2woVHJ1ZSkKICAgIC8vIHNlbGYudmF1bHRzW293bmVyXSA9IHZhdWx0LmNvcHkoKSAjIDwtLSBBRERFRCAuQ09QWSgpIEZPUiBTQUZFIEFTU0lHTk1FTlQKICAgIGludGNfMyAvLyAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjgzCiAgICAvLyB2YXVsdC5ob3NwaXRhbF9hcHByb3ZlZCA9IGFyYzQuQm9vbChUcnVlKQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6ODMtODQKICAgIC8vIHZhdWx0Lmhvc3BpdGFsX2FwcHJvdmVkID0gYXJjNC5Cb29sKFRydWUpCiAgICAvLyBzZWxmLnZhdWx0c1tvd25lcl0gPSB2YXVsdC5jb3B5KCkgIyA8LS0gQURERUQgLkNPUFkoKSBGT1IgU0FGRSBBU1NJR05NRU5UCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFmdGVybGlmZV92YXVsdC5jb250cmFjdC5BZnRlcmxpZmVWYXVsdC5hcHByb3ZlX2RlYXRoW3JvdXRpbmddKCkgLT4gdm9pZDoKYXBwcm92ZV9kZWF0aDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6ODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5Ojg5CiAgICAvLyB2YXVsdCA9IHNlbGYudmF1bHRzW293bmVyXS5jb3B5KCkKICAgIGJ5dGVjXzEgLy8gInZhdWx0cyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52YXVsdHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5Ojg5LTkwCiAgICAvLyB2YXVsdCA9IHNlbGYudmF1bHRzW293bmVyXS5jb3B5KCkKICAgIC8vIGFzc2VydCB2YXVsdC5pc19hY3RpdmUubmF0aXZlLCAiVmF1bHQgaXMgbm90IGFjdGl2ZSIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBhc3NlcnQgdmF1bHQuaXNfYWN0aXZlLm5hdGl2ZSwgIlZhdWx0IGlzIG5vdCBhY3RpdmUiCiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYXNzZXJ0IC8vIFZhdWx0IGlzIG5vdCBhY3RpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6OTEKICAgIC8vIGFzc2VydCB2YXVsdC5ob3NwaXRhbF9hcHByb3ZlZC5uYXRpdmUsICJQcm90b2NvbCBub3QgaW5pdGlhdGVkIGJ5IGhvc3BpdGFsIgogICAgaW50Y18zIC8vIDIKICAgIGdldGJpdAogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGFzc2VydCAvLyBQcm90b2NvbCBub3QgaW5pdGlhdGVkIGJ5IGhvc3BpdGFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjkzLTk0CiAgICAvLyAjIENoZWNrIGNhbGxlciBpZGVudGl0eQogICAgLy8gaXNfZ292ID0gVHhuLnNlbmRlciA9PSB2YXVsdC5kZXNpZ25hdGVkX2dvdi5uYXRpdmUKICAgIHR4biBTZW5kZXIKICAgIGRpZyAxCiAgICBwdXNoaW50IDMzCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weTo5NQogICAgLy8gaXNfdmVyaWZpZXIgPSBUeG4uc2VuZGVyID09IHZhdWx0LmRlc2lnbmF0ZWRfdmVyaWZpZXIubmF0aXZlCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDIKICAgIHB1c2hpbnQgNjUKICAgIGludGNfMiAvLyAzMgogICAgYm94X2V4dHJhY3QKICAgID09CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6OTYKICAgIC8vIGFzc2VydCBpc19nb3Ygb3IgaXNfdmVyaWZpZXIsICJVbmF1dGhvcml6ZWQ6IE5vdCBHb3Ygb3IgVmVyaWZpZXIiCiAgICBkaWcgMQogICAgfHwKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQ6IE5vdCBHb3Ygb3IgVmVyaWZpZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6OTgKICAgIC8vIGlmIGlzX2dvdjoKICAgIGJ6IGFwcHJvdmVfZGVhdGhfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5Ojk5CiAgICAvLyB2YXVsdC5nb3ZfYXBwcm92ZWQgPSBhcmM0LkJvb2woVHJ1ZSkKICAgIGRpZyAxCiAgICBwdXNoaW50IDMKICAgIGludGNfMSAvLyAxCiAgICBzZXRiaXQKICAgIGJ1cnkgMgoKYXBwcm92ZV9kZWF0aF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEwMAogICAgLy8gaWYgaXNfdmVyaWZpZXI6CiAgICBkdXAKICAgIGJ6IGFwcHJvdmVfZGVhdGhfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEwMQogICAgLy8gdmF1bHQudmVyaWZpZXJfYXBwcm92ZWQgPSBhcmM0LkJvb2woVHJ1ZSkKICAgIGRpZyAxCiAgICBwdXNoaW50IDQKICAgIGludGNfMSAvLyAxCiAgICBzZXRiaXQKICAgIGJ1cnkgMgoKYXBwcm92ZV9kZWF0aF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEwMy0xMDQKICAgIC8vICMgSWYgMy8zIGNvbnNlbnN1cyByZWFjaGVkLCB1bmxvY2sgdGhlIHZhdWx0CiAgICAvLyBpZiB2YXVsdC5ob3NwaXRhbF9hcHByb3ZlZC5uYXRpdmUgYW5kIHZhdWx0Lmdvdl9hcHByb3ZlZC5uYXRpdmUgYW5kIHZhdWx0LnZlcmlmaWVyX2FwcHJvdmVkLm5hdGl2ZToKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gMgogICAgZ2V0Yml0CiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnogYXBwcm92ZV9kZWF0aF9hZnRlcl9pZl9lbHNlQDkKICAgIGRpZyAxCiAgICBwdXNoaW50IDMKICAgIGdldGJpdAogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ6IGFwcHJvdmVfZGVhdGhfYWZ0ZXJfaWZfZWxzZUA5CiAgICBkaWcgMQogICAgcHVzaGludCA0CiAgICBnZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieiBhcHByb3ZlX2RlYXRoX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMDUKICAgIC8vIHZhdWx0LmlzX3VubG9ja2VkID0gYXJjNC5Cb29sKFRydWUpCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDEKICAgIGR1cAogICAgc2V0Yml0CiAgICBidXJ5IDIKCmFwcHJvdmVfZGVhdGhfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMDcKICAgIC8vIHNlbGYudmF1bHRzW293bmVyXSA9IHZhdWx0LmNvcHkoKSAjIDwtLSBBRERFRCAuQ09QWSgpCiAgICBkaWcgMgogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWZ0ZXJsaWZlX3ZhdWx0LmNvbnRyYWN0LkFmdGVybGlmZVZhdWx0LmNhbmNlbF9kZWF0aF9wcm90b2NvbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNhbmNlbF9kZWF0aF9wcm90b2NvbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTEzCiAgICAvLyB2YXVsdCA9IHNlbGYudmF1bHRzW293bmVyXS5jb3B5KCkKICAgIGJ5dGVjXzEgLy8gInZhdWx0cyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTEyCiAgICAvLyBvd25lciA9IFR4bi5zZW5kZXIKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTEzCiAgICAvLyB2YXVsdCA9IHNlbGYudmF1bHRzW293bmVyXS5jb3B5KCkKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52YXVsdHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjExNQogICAgLy8gYXNzZXJ0IHZhdWx0LmlzX2FjdGl2ZS5uYXRpdmUsICJWYXVsdCBpcyBub3QgYWN0aXZlIgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGFzc2VydCAvLyBWYXVsdCBpcyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjExNgogICAgLy8gYXNzZXJ0IG5vdCB2YXVsdC5pc191bmxvY2tlZC5uYXRpdmUsICJWYXVsdCBhbHJlYWR5IHBlcm1hbmVudGx5IHVubG9ja2VkIgogICAgaW50Y18xIC8vIDEKICAgIGdldGJpdAogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBWYXVsdCBhbHJlYWR5IHBlcm1hbmVudGx5IHVubG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjExOC0xMTkKICAgIC8vICMgUmVzZXQgdGhlIGFwcHJvdmFscwogICAgLy8gdmF1bHQuaG9zcGl0YWxfYXBwcm92ZWQgPSBhcmM0LkJvb2woRmFsc2UpCiAgICBpbnRjXzMgLy8gMgogICAgaW50Y18wIC8vIDAKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMjAKICAgIC8vIHZhdWx0Lmdvdl9hcHByb3ZlZCA9IGFyYzQuQm9vbChGYWxzZSkKICAgIHB1c2hpbnQgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMTgtMTE5CiAgICAvLyAjIFJlc2V0IHRoZSBhcHByb3ZhbHMKICAgIC8vIHZhdWx0Lmhvc3BpdGFsX2FwcHJvdmVkID0gYXJjNC5Cb29sKEZhbHNlKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTIwCiAgICAvLyB2YXVsdC5nb3ZfYXBwcm92ZWQgPSBhcmM0LkJvb2woRmFsc2UpCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTIxCiAgICAvLyB2YXVsdC52ZXJpZmllcl9hcHByb3ZlZCA9IGFyYzQuQm9vbChGYWxzZSkKICAgIHB1c2hpbnQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMTgtMTE5CiAgICAvLyAjIFJlc2V0IHRoZSBhcHByb3ZhbHMKICAgIC8vIHZhdWx0Lmhvc3BpdGFsX2FwcHJvdmVkID0gYXJjNC5Cb29sKEZhbHNlKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTIxCiAgICAvLyB2YXVsdC52ZXJpZmllcl9hcHByb3ZlZCA9IGFyYzQuQm9vbChGYWxzZSkKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMjMKICAgIC8vIHNlbGYudmF1bHRzW293bmVyXSA9IHZhdWx0LmNvcHkoKSAjIDwtLSBBRERFRCAuQ09QWSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFmdGVybGlmZV92YXVsdC5jb250cmFjdC5BZnRlcmxpZmVWYXVsdC5nZXRfYmVuZWZpY2lhcmllc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9iZW5lZmljaWFyaWVzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEyOAogICAgLy8gdmF1bHQgPSBzZWxmLnZhdWx0c1tvd25lcl0uY29weSgpICMgPC0tIEFEREVEIC5DT1BZKCkgVE8gUkVBRCBWQUxVRQogICAgYnl0ZWNfMSAvLyAidmF1bHRzIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52YXVsdHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEyOQogICAgLy8gcmV0dXJuIHZhdWx0LmJlbmVmaWNpYXJpZXMKICAgIGR1cAogICAgcHVzaGludCA5NwogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWZ0ZXJsaWZlX3ZhdWx0LmNvbnRyYWN0LkFmdGVybGlmZVZhdWx0LmlzX3ZhdWx0X3VubG9ja2VkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNfdmF1bHRfdW5sb2NrZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTM0CiAgICAvLyB2YXVsdCA9IHNlbGYudmF1bHRzW293bmVyXS5jb3B5KCkgIyA8LS0gQURERUQgLkNPUFkoKSBUTyBSRUFEIFZBTFVFCiAgICBieXRlY18xIC8vICJ2YXVsdHMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hZnRlcmxpZmVfdmF1bHQvY29udHJhY3QucHk6MTM0LTEzNQogICAgLy8gdmF1bHQgPSBzZWxmLnZhdWx0c1tvd25lcl0uY29weSgpICMgPC0tIEFEREVEIC5DT1BZKCkgVE8gUkVBRCBWQUxVRQogICAgLy8gcmV0dXJuIHZhdWx0LmlzX3VubG9ja2VkLm5hdGl2ZQogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18xIC8vIDEKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FmdGVybGlmZV92YXVsdC9jb250cmFjdC5weToxMzUKICAgIC8vIHJldHVybiB2YXVsdC5pc191bmxvY2tlZC5uYXRpdmUKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWZ0ZXJsaWZlX3ZhdWx0L2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEgAiYDAQAGdmF1bHRzBBUffHUxG0EAOTEZFEQxGESCBgRZMNBfBEaNqj4EKaqYKQTlS9PxBFmTJawEtIS+XTYaAI4GAAkA4wEOAaYB2gH1ADEZFDEYFBBDIjYaAUcCIllJTgJJJAslCE8CFRJENhoCSU4CSSJZSU4DSYEICyUITwIVEkQ2GgNJTgMVJBJENhoESU4DFSQSRDYaBUlOAxUkEkQSRCJJSUsGDEEAGksGVwIASwFJTgKBCAtbSwMIRQMjCEUBQv/fSwGBZBJEgAIAAEUKIkUBSUsIDEEANksIVwIASwFJTgIkCyRYSwhXAgBLAoEIC4EIWFBLC0lPAlBMIlkjCBZXBgJcAEULIwhFAUL/w4ABgEsFUEsEUEsDUIACAGNQSwpQKTEAUEm8SEy/I0M2GgFJFSQSRClMUEkiI7pJIlMoIk8CVCJTRDEASwIjJLoSRCUjVCJMuyNDNhoBSRUkEkQpTFBHAr5MTgJESSIjukkiUygiTwJUIlNEJVMoIk8CVCJTRDEASwGBISS6EjEATwKBQSS6EklOAksBEURBAAhLAYEDI1RFAklBAAhLAYEEI1RFAksBJVMoIk8CVCJTQQAlSwGBA1MoIk8CVCJTQQAWSwGBBFMoIk8CVCJTQQAHSwEjSVRFAksCSbxISwK/I0MpMQBQSb5ESwEiI7pJIlMoIk8CVCJTRCNTKCJPAlQiUxREJSJUgQMiVIEEIlRLAbxIvyNDNhoBSRUkEkQpTFC+REmBYVlLARVSKkxQsCNDNhoBSRUkEkQpTFAiI7ojUygiTwJUKkxQsCND", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }