{ "name": "TicTacToeContract", "structs": {}, "methods": [ { "name": "new_game", "args": [ { "type": "(uint64,uint64)", "name": "move" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "join_game", "args": [ { "type": "(uint64,uint64)", "name": "move" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "whose_turn", "args": [], "returns": { "type": "uint8" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "play", "args": [ { "type": "(uint64,uint64)", "name": "move" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 4 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "challenger": { "keyType": "AVMString", "valueType": "address", "key": "Y2hhbGxlbmdlcg==" }, "winner": { "keyType": "AVMString", "valueType": "uint8", "key": "d2lubmVy" }, "host": { "keyType": "AVMString", "valueType": "address", "key": "aG9zdA==" }, "game": { "keyType": "AVMString", "valueType": "uint8[3][3]", "key": "Z2FtZQ==" }, "turns": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dHVybnM=" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 269 ], "errorMessage": "Game is already finished" }, { "pc": [ 129 ], "errorMessage": "Game isn't over" }, { "pc": [ 209 ], "errorMessage": "Host already has a challenger" }, { "pc": [ 307 ], "errorMessage": "It is the challenger's turn" }, { "pc": [ 288 ], "errorMessage": "It is the host's turn" }, { "pc": [ 159, 334 ], "errorMessage": "Move must be in range" }, { "pc": [ 355 ], "errorMessage": "Square is already taken" }, { "pc": [ 163, 338, 389 ], "errorMessage": "check self.game exists" }, { "pc": [ 286 ], "errorMessage": "check self.host exists" }, { "pc": [ 226, 273, 374, 434 ], "errorMessage": "check self.turns exists" }, { "pc": [ 169, 174, 175, 345, 350, 360, 367, 392, 397, 401, 413, 450, 459, 461, 470, 480, 486, 498, 509, 520, 523, 538, 549, 552 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 103, 195, 255 ], "errorMessage": "invalid number of bytes for arc4.tuple" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMyAxNgogICAgYnl0ZWNibG9jayAiZ2FtZSIgInR1cm5zIiAiY2hhbGxlbmdlciIgIndpbm5lciIgMHgwMSAweDAyICJob3N0IgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weToxNQogICAgLy8gY2xhc3MgVGljVGFjVG9lQ29udHJhY3QoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXMgMHg5NmE5NzE4MSAvLyBtZXRob2QgIm5ld19nYW1lKCh1aW50NjQsdWludDY0KSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbmV3X2dhbWUKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weToxNQogICAgLy8gY2xhc3MgVGljVGFjVG9lQ29udHJhY3QoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDE3YTA3OWIzIDB4YmI5ZjExNDcgMHg5ZWViZjU4ZSAvLyBtZXRob2QgImpvaW5fZ2FtZSgodWludDY0LHVpbnQ2NCkpdm9pZCIsIG1ldGhvZCAid2hvc2VfdHVybigpdWludDgiLCBtZXRob2QgInBsYXkoKHVpbnQ2NCx1aW50NjQpKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBqb2luX2dhbWUgd2hvc2VfdHVybiBwbGF5CiAgICBlcnIKCgovLyBleGFtcGxlcy50aWN0YWN0b2UudGljdGFjdG9lLlRpY1RhY1RvZUNvbnRyYWN0Lm5ld19nYW1lW3JvdXRpbmddKCkgLT4gdm9pZDoKbmV3X2dhbWU6CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJhbGxvdyIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIHB1c2hpbnQgOAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6MjIKICAgIC8vIGlmIFR4bi5hcHBsaWNhdGlvbl9pZDoKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBuZXdfZ2FtZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6MjMtMjUKICAgIC8vICMgaWYgYSBjaGFsbGVuZ2VyIGhhcyBqb2luZWQsIGRvbid0IGFsbG93IHN0YXJ0aW5nIGEgbmV3IGdhbWUKICAgIC8vICMgdW50aWwgdGhpcyBvbmUgaXMgY29tcGxldGUKICAgIC8vIGlmIHNlbGYuY2hhbGxlbmdlcjoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJjaGFsbGVuZ2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYnogbmV3X2dhbWVfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjI2CiAgICAvLyBhc3NlcnQgc2VsZi53aW5uZXIsICJHYW1lIGlzbid0IG92ZXIiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAid2lubmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEdhbWUgaXNuJ3Qgb3ZlcgoKbmV3X2dhbWVfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weToyNy0yOAogICAgLy8gIyByZXNldCBjaGFsbGVuZ2VyIGFuZCB3aW5uZXIKICAgIC8vIGRlbCBzZWxmLmNoYWxsZW5nZXIudmFsdWUKICAgIGJ5dGVjXzIgLy8gImNoYWxsZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weToyOQogICAgLy8gZGVsIHNlbGYud2lubmVyLnZhbHVlCiAgICBieXRlY18zIC8vICJ3aW5uZXIiCiAgICBhcHBfZ2xvYmFsX2RlbAoKbmV3X2dhbWVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTozMAogICAgLy8gc2VsZi5ob3N0ID0gVHhuLnNlbmRlcgogICAgYnl0ZWMgNiAvLyAiaG9zdCIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjMxCiAgICAvLyBzZWxmLmdhbWUgPSBHYW1lLmZyb21fYnl0ZXMob3AuYnplcm8oOSkpCiAgICBwdXNoaW50IDkKICAgIGJ6ZXJvCiAgICBieXRlY18wIC8vICJnYW1lIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6MzMKICAgIC8vIGFzc2VydCBjb2x1bW4gPCAzIGFuZCByb3cgPCAzLCAiTW92ZSBtdXN0IGJlIGluIHJhbmdlIgogICAgZGlnIDEKICAgIGludGNfMiAvLyAzCiAgICA8CiAgICBieiBuZXdfZ2FtZV9ib29sX2ZhbHNlQDgKICAgIGR1cAogICAgaW50Y18yIC8vIDMKICAgIDwKICAgIGJ6IG5ld19nYW1lX2Jvb2xfZmFsc2VAOAogICAgaW50Y18xIC8vIDEKCm5ld19nYW1lX2Jvb2xfbWVyZ2VAOToKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6MzMKICAgIC8vIGFzc2VydCBjb2x1bW4gPCAzIGFuZCByb3cgPCAzLCAiTW92ZSBtdXN0IGJlIGluIHJhbmdlIgogICAgYXNzZXJ0IC8vIE1vdmUgbXVzdCBiZSBpbiByYW5nZQogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTozNAogICAgLy8gc2VsZi5nYW1lW3Jvd11bY29sdW1uXSA9IGFyYzQuVUludDgoSE9TVCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdhbWUgZXhpc3RzCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMwogICAgKgogICAgZHVwMgogICAgaW50Y18yIC8vIDMKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdW5jb3ZlciAzCiAgICBieXRlYyA0IC8vIDB4MDEKICAgIHJlcGxhY2UzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcmVwbGFjZTMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlY18wIC8vICJnYW1lIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6MzUKICAgIC8vIHNlbGYudHVybnMgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzEgLy8gInR1cm5zIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJhbGxvdyIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpuZXdfZ2FtZV9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiBuZXdfZ2FtZV9ib29sX21lcmdlQDkKCgovLyBleGFtcGxlcy50aWN0YWN0b2UudGljdGFjdG9lLlRpY1RhY1RvZUNvbnRyYWN0LmpvaW5fZ2FtZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmpvaW5fZ2FtZToKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC50dXBsZTxhcmM0LnVpbnQ2NCxhcmM0LnVpbnQ2ND4KICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBwdXNoaW50IDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjM5CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuY2hhbGxlbmdlciwgIkhvc3QgYWxyZWFkeSBoYXMgYSBjaGFsbGVuZ2VyIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNoYWxsZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSG9zdCBhbHJlYWR5IGhhcyBhIGNoYWxsZW5nZXIKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NDAKICAgIC8vIHNlbGYuY2hhbGxlbmdlci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjXzIgLy8gImNoYWxsZW5nZXIiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo0MQogICAgLy8gc2VsZi5tYWtlX21vdmUoYXJjNC5VSW50OChDSEFMTEVOR0VSKSwgbW92ZSkKICAgIGJ5dGVjIDUgLy8gMHgwMgogICAgY292ZXIgMgogICAgY2FsbHN1YiBtYWtlX21vdmUKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLnRpY3RhY3RvZS50aWN0YWN0b2UuVGljVGFjVG9lQ29udHJhY3Qud2hvc2VfdHVybltyb3V0aW5nXSgpIC0+IHZvaWQ6Cndob3NlX3R1cm46CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjQ1CiAgICAvLyByZXR1cm4gYXJjNC5VSW50OChIT1NUKSBpZiBzZWxmLnR1cm5zICUgMiBlbHNlIGFyYzQuVUludDgoQ0hBTExFTkdFUikKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ0dXJucyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50dXJucyBleGlzdHMKICAgIHB1c2hpbnQgMgogICAgJQogICAgYnl0ZWMgNSAvLyAweDAyCiAgICBieXRlYyA0IC8vIDB4MDEKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLnRpY3RhY3RvZS50aWN0YWN0b2UuVGljVGFjVG9lQ29udHJhY3QucGxheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnBsYXk6CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMTYKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudHVwbGU8YXJjNC51aW50NjQsYXJjNC51aW50NjQ+CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgcHVzaGludCA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo0OQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLndpbm5lciwgIkdhbWUgaXMgYWxyZWFkeSBmaW5pc2hlZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ3aW5uZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gR2FtZSBpcyBhbHJlYWR5IGZpbmlzaGVkCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjUwCiAgICAvLyBpZiBzZWxmLnR1cm5zICUgMjoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ0dXJucyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50dXJucyBleGlzdHMKICAgIHB1c2hpbnQgMgogICAgJQogICAgYnogcGxheV9lbHNlX2JvZHlAMwogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo1MQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5ob3N0LCAiSXQgaXMgdGhlIGhvc3QncyB0dXJuIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImhvc3QiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaG9zdCBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gSXQgaXMgdGhlIGhvc3QncyB0dXJuCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjUyCiAgICAvLyBwbGF5ZXIgPSBhcmM0LlVJbnQ4KEhPU1QpCiAgICBieXRlYyA0IC8vIDB4MDEKCnBsYXlfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo1OAogICAgLy8gc2VsZi5tYWtlX21vdmUocGxheWVyLCBtb3ZlKQogICAgY292ZXIgMgogICAgY2FsbHN1YiBtYWtlX21vdmUKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcGxheV9lbHNlX2JvZHlAMzoKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NTQKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYuY2hhbGxlbmdlci5nZXQoCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjU1CiAgICAvLyBkZWZhdWx0PUFjY291bnQoKQogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjU0CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNoYWxsZW5nZXIuZ2V0KAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImNoYWxsZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo1NC01NgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5jaGFsbGVuZ2VyLmdldCgKICAgIC8vICAgICBkZWZhdWx0PUFjY291bnQoKQogICAgLy8gKSwgIkl0IGlzIHRoZSBjaGFsbGVuZ2VyJ3MgdHVybiIKICAgIHNlbGVjdAogICAgPT0KICAgIGFzc2VydCAvLyBJdCBpcyB0aGUgY2hhbGxlbmdlcidzIHR1cm4KICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NTcKICAgIC8vIHBsYXllciA9IGFyYzQuVUludDgoQ0hBTExFTkdFUikKICAgIGJ5dGVjIDUgLy8gMHgwMgogICAgYiBwbGF5X2FmdGVyX2lmX2Vsc2VANAoKCi8vIGV4YW1wbGVzLnRpY3RhY3RvZS50aWN0YWN0b2UuVGljVGFjVG9lQ29udHJhY3QubWFrZV9tb3ZlKHBsYXllcjogYnl0ZXMsIG1vdmUuMDogdWludDY0LCBtb3ZlLjE6IHVpbnQ2NCkgLT4gdm9pZDoKbWFrZV9tb3ZlOgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo2MC02MQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBtYWtlX21vdmUoc2VsZiwgcGxheWVyOiBhcmM0LlVJbnQ4LCBtb3ZlOiBNb3ZlKSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiA0CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjYzCiAgICAvLyBhc3NlcnQgY29sdW1uIDwgMyBhbmQgcm93IDwgMywgIk1vdmUgbXVzdCBiZSBpbiByYW5nZSIKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDMKICAgIDwKICAgIGJ6IG1ha2VfbW92ZV9ib29sX2ZhbHNlQDMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDMKICAgIDwKICAgIGJ6IG1ha2VfbW92ZV9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCgptYWtlX21vdmVfYm9vbF9tZXJnZUA0OgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo2MwogICAgLy8gYXNzZXJ0IGNvbHVtbiA8IDMgYW5kIHJvdyA8IDMsICJNb3ZlIG11c3QgYmUgaW4gcmFuZ2UiCiAgICBhc3NlcnQgLy8gTW92ZSBtdXN0IGJlIGluIHJhbmdlCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjY0CiAgICAvLyBhc3NlcnQgc2VsZi5nYW1lW3Jvd11bY29sdW1uXSA9PSBFTVBUWSwgIlNxdWFyZSBpcyBhbHJlYWR5IHRha2VuIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdhbWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2FtZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDMKICAgICoKICAgIGR1cDIKICAgIGludGNfMiAvLyAzCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzEgLy8gMQogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYj09CiAgICBhc3NlcnQgLy8gU3F1YXJlIGlzIGFscmVhZHkgdGFrZW4KICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NjUKICAgIC8vIHNlbGYuZ2FtZVtyb3ddW2NvbHVtbl0gPSBwbGF5ZXIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0zCiAgICByZXBsYWNlMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlY18wIC8vICJnYW1lIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NjYKICAgIC8vIHNlbGYudHVybnMgKz0gMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInR1cm5zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnR1cm5zIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjXzEgLy8gInR1cm5zIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NzQKICAgIC8vIGcgPSBzZWxmLmdhbWUuY29weSgpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiZ2FtZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgNAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2FtZSBleGlzdHMKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NzYKICAgIC8vIGlmIGdbcm93XVswXSA9PSBnW3Jvd11bMV0gPT0gZ1tyb3ddWzJdOgogICAgc3dhcAogICAgaW50Y18yIC8vIDMKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGR1cAogICAgZXh0cmFjdCAwIDEgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICBiPT0KICAgIGJ6IG1ha2VfbW92ZV9hZnRlcl9pZl9lbHNlQDEzCiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdCAyIDEgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgMgogICAgYj09CiAgICBieiBtYWtlX21vdmVfYWZ0ZXJfaWZfZWxzZUAxMwogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo3NwogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCgptYWtlX21vdmVfYWZ0ZXJfaW5saW5lZF9leGFtcGxlcy50aWN0YWN0b2UudGljdGFjdG9lLlRpY1RhY1RvZUNvbnRyYWN0LmRpZF93aW5AMjU6CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjY3CiAgICAvLyBpZiBzZWxmLmRpZF93aW4ocGxheWVyLCBjb2x1bW49Y29sdW1uLCByb3c9cm93KToKICAgIGJ6IG1ha2VfbW92ZV9lbHNlX2JvZHlANgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo2OAogICAgLy8gc2VsZi53aW5uZXIudmFsdWUgPSBwbGF5ZXIKICAgIGJ5dGVjXzMgLy8gIndpbm5lciIKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKCm1ha2VfbW92ZV9hZnRlcl9pZl9lbHNlQDk6CiAgICByZXRzdWIKCm1ha2VfbW92ZV9lbHNlX2JvZHlANjoKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NjkKICAgIC8vIGVsaWYgc2VsZi50dXJucyA9PSA5OgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInR1cm5zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnR1cm5zIGV4aXN0cwogICAgcHVzaGludCA5CiAgICA9PQogICAgYnogbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo3MAogICAgLy8gc2VsZi53aW5uZXIudmFsdWUgPSBhcmM0LlVJbnQ4KERSQVcpCiAgICBieXRlY18zIC8vICJ3aW5uZXIiCiAgICBwdXNoYnl0ZXMgMHgwMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5Ojc5CiAgICAvLyBpZiBnWzBdW2NvbHVtbl0gPT0gZ1sxXVtjb2x1bW5dID09IGdbMl1bY29sdW1uXToKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGV4dHJhY3QgMCAzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDMKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDEKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgc3dhcAogICAgZXh0cmFjdCAzIDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDEKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGI9PQogICAgYnogbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAMTYKICAgIGZyYW1lX2RpZyA0CiAgICBleHRyYWN0IDYgMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDEKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfZGlnIDAKICAgIGI9PQogICAgYnogbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAMTYKICAgIHBvcAogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo4MAogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjY3CiAgICAvLyBpZiBzZWxmLmRpZF93aW4ocGxheWVyLCBjb2x1bW49Y29sdW1uLCByb3c9cm93KToKICAgIGIgbWFrZV9tb3ZlX2FmdGVyX2lubGluZWRfZXhhbXBsZXMudGljdGFjdG9lLnRpY3RhY3RvZS5UaWNUYWNUb2VDb250cmFjdC5kaWRfd2luQDI1CgptYWtlX21vdmVfYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6ODItODMKICAgIC8vICMgaWYgcGxheWVyIG93bnMgY2VudGVyLCBjaGVjayBkaWFnb25hbHMKICAgIC8vIGlmIHBsYXllciA9PSBnWzFdWzFdOgogICAgZXh0cmFjdCAxIDEgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTMKICAgIGI9PQogICAgYnogbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAMjQKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6ODQKICAgIC8vIGlmIGdbMF1bMF0gPT0gcGxheWVyID09IGdbMl1bMl06CiAgICBmcmFtZV9kaWcgMwogICAgZXh0cmFjdCAwIDEgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTMKICAgIGI9PQogICAgYnogbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAMjAKICAgIGZyYW1lX2RpZyA0CiAgICBleHRyYWN0IDYgMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGV4dHJhY3QgMiAxIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfZGlnIC0zCiAgICBiPT0KICAgIGJ6IG1ha2VfbW92ZV9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5Ojg1CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6NjcKICAgIC8vIGlmIHNlbGYuZGlkX3dpbihwbGF5ZXIsIGNvbHVtbj1jb2x1bW4sIHJvdz1yb3cpOgogICAgYiBtYWtlX21vdmVfYWZ0ZXJfaW5saW5lZF9leGFtcGxlcy50aWN0YWN0b2UudGljdGFjdG9lLlRpY1RhY1RvZUNvbnRyYWN0LmRpZF93aW5AMjUKCm1ha2VfbW92ZV9hZnRlcl9pZl9lbHNlQDIwOgogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo4NgogICAgLy8gaWYgZ1swXVsyXSA9PSBwbGF5ZXIgPT0gZ1syXVswXToKICAgIGZyYW1lX2RpZyAzCiAgICBleHRyYWN0IDIgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGZyYW1lX2RpZyAtMwogICAgYj09CiAgICBieiBtYWtlX21vdmVfYWZ0ZXJfaWZfZWxzZUAyNAogICAgZnJhbWVfZGlnIDQKICAgIGV4dHJhY3QgNiAzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZXh0cmFjdCAwIDEgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTMKICAgIGI9PQogICAgYnogbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAMjQKICAgIC8vIHRpY3RhY3RvZS90aWN0YWN0b2UucHk6ODcKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgLy8gdGljdGFjdG9lL3RpY3RhY3RvZS5weTo2NwogICAgLy8gaWYgc2VsZi5kaWRfd2luKHBsYXllciwgY29sdW1uPWNvbHVtbiwgcm93PXJvdyk6CiAgICBiIG1ha2VfbW92ZV9hZnRlcl9pbmxpbmVkX2V4YW1wbGVzLnRpY3RhY3RvZS50aWN0YWN0b2UuVGljVGFjVG9lQ29udHJhY3QuZGlkX3dpbkAyNQoKbWFrZV9tb3ZlX2FmdGVyX2lmX2Vsc2VAMjQ6CiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5Ojg4CiAgICAvLyByZXR1cm4gRmFsc2UKICAgIGludGNfMCAvLyAwCiAgICAvLyB0aWN0YWN0b2UvdGljdGFjdG9lLnB5OjY3CiAgICAvLyBpZiBzZWxmLmRpZF93aW4ocGxheWVyLCBjb2x1bW49Y29sdW1uLCByb3c9cm93KToKICAgIGIgbWFrZV9tb3ZlX2FmdGVyX2lubGluZWRfZXhhbXBsZXMudGljdGFjdG9lLnRpY3RhY3RvZS5UaWNUYWNUb2VDb250cmFjdC5kaWRfd2luQDI1CgptYWtlX21vdmVfYm9vbF9mYWxzZUAzOgogICAgaW50Y18wIC8vIDAKICAgIGIgbWFrZV9tb3ZlX2Jvb2xfbWVyZ2VANAo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEDECYHBGdhbWUFdHVybnMKY2hhbGxlbmdlcgZ3aW5uZXIBAQECBGhvc3QxGRREgASWqXGBNhoAjgEAIDEYRIIDBBegebMEu58RRwSe6/WONhoAjgMAXQCAAJkANhoBSRUlEkRJIltMgQhbMRhBABIiKmVFAUEABiIrZUUBRCppK2knBjEAZ4EJryhMZ0sBJAxBACBJJAxBABojRCIoZURMJAtKJFhPAycEXV0oTGcpImcjQyJC/+M2GgFJFSUSREkiW0yBCFsiKmVFARREKjEAZycFTgKIAFwjQyIpZUSBAhgnBScETwJNgAQVH3x1TFCwI0M2GgFJFSUSREkiW0yBCFsiK2VFARREIillRIECGEEAEjEAIicGZUQSRCcETgKIABEjQzEAMgMiKmVNEkQnBUL/6ooDACJHBIv+JAxBAPOL/yQMQQDsI0QiKGVEi/8kC0okWEmL/iNYgAEAqESL/ov9XU8CSwJPAl0oTGciKWVEIwgpTGciKGVMSU4CjARETCRYSYwBSVcAAUxXAQFJjAKoQQAkiwFXAgGLAqhBABkjQQAFK4v9Z4kiKWVEgQkSQf/1K4ABA2eJiwRJVwADSYwDi/4jWExXAwNJTgKL/iNYSYwAqEEAFIsEVwYDi/4jWIsAqEEABUgjQv+1VwEBi/2oQQA6iwNXAAGL/ahBABKLBFcGA1cCAYv9qEEABCNC/4+LA1cCAYv9qEEAEosEVwYDVwABi/2oQQAEI0L/ciJC/24iQv8R", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }