{ "name": "X402Gateway", "structs": { "PaymentReceipt": [ { "name": "payer", "type": "address" }, { "name": "resource_id", "type": "string" }, { "name": "amount", "type": "uint64" }, { "name": "treasury_share", "type": "uint64" }, { "name": "timestamp", "type": "uint64" }, { "name": "round_settled", "type": "uint64" } ] }, "methods": [ { "name": "configure", "args": [ { "type": "address", "name": "treasury" }, { "type": "uint64", "name": "asset_id" }, { "type": "uint64", "name": "share_bps" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "settle", "args": [ { "type": "axfer", "name": "payment" }, { "type": "string", "name": "resource_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Verifies the x402 payment transfer sitting in this atomic group, writes\na receipt, and forwards the treasury's share.\nReturns the receipt id.", "events": [], "recommendations": {} }, { "name": "get_receipt", "args": [ { "type": "uint64", "name": "receipt_id" } ], "returns": { "type": "(address,string,uint64,uint64,uint64,uint64)", "struct": "PaymentReceipt" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "revenue_summary", "args": [], "returns": { "type": "(uint64,uint64,uint64)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns (total calls, gross revenue, amount routed to treasury).", "events": [], "recommendations": {} }, { "name": "opt_in_to_asset", "args": [ { "type": "uint64", "name": "asset_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Opts the application account into the settlement asset.", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "Records and splits x402 pay-per-use settlements.", "networks": {}, "state": { "schema": { "global": { "ints": 5, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "address", "key": "YWRtaW4=" }, "treasury": { "keyType": "AVMString", "valueType": "address", "key": "dHJlYXN1cnk=" }, "asset_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfaWQ=" }, "treasury_share_bps": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dHJlYXN1cnlfc2hhcmVfYnBz" }, "total_calls": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfY2FsbHM=" }, "total_revenue": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfcmV2ZW51ZQ==" }, "total_to_treasury": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfdG9fdHJlYXN1cnk=" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "receipts": { "keyType": "uint64", "valueType": "PaymentReceipt", "prefix": "cmNwdA==" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 306 ], "errorMessage": "amount must be positive" }, { "pc": [ 235, 524 ], "errorMessage": "check self.admin exists" }, { "pc": [ 290, 426 ], "errorMessage": "check self.asset_id exists" }, { "pc": [ 341, 485 ], "errorMessage": "check self.total_calls exists" }, { "pc": [ 402, 490 ], "errorMessage": "check self.total_revenue exists" }, { "pc": [ 412, 495 ], "errorMessage": "check self.total_to_treasury exists" }, { "pc": [ 431 ], "errorMessage": "check self.treasury exists" }, { "pc": [ 327 ], "errorMessage": "check self.treasury_share_bps exists" }, { "pc": [ 274 ], "errorMessage": "invalid array length header" }, { "pc": [ 282 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 210 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 218, 227, 461, 516 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 314 ], "errorMessage": "must not close asset holding" }, { "pc": [ 322 ], "errorMessage": "must not rekey" }, { "pc": [ 237, 526 ], "errorMessage": "only admin" }, { "pc": [ 243 ], "errorMessage": "share cannot exceed 100%" }, { "pc": [ 268 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 472 ], "errorMessage": "unknown receipt" }, { "pc": [ 300 ], "errorMessage": "wrong receiver" }, { "pc": [ 292 ], "errorMessage": "wrong settlement asset" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCA0CiAgICBieXRlY2Jsb2NrICJhc3NldF9pZCIgInRvdGFsX2NhbGxzIiAidG90YWxfcmV2ZW51ZSIgInRvdGFsX3RvX3RyZWFzdXJ5IiAiYWRtaW4iICJ0cmVhc3VyeSIgInRyZWFzdXJ5X3NoYXJlX2JwcyIgMHgxNTFmN2M3NSAweDcyNjM3MDc0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBzZWxmLmFkbWluID0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcwogICAgYnl0ZWMgNCAvLyAiYWRtaW4iCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBzZWxmLnRyZWFzdXJ5ID0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcwogICAgYnl0ZWMgNSAvLyAidHJlYXN1cnkiCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjQ3LTQ4CiAgICAvLyAjIFNldHRsZW1lbnQgYXNzZXQgKFVTREMgb24gdGhlIGFjdGl2ZSBuZXR3b3JrKS4KICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzAgLy8gImFzc2V0X2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjUwLTUxCiAgICAvLyAjIFNoYXJlIG9mIGVhY2ggcGF5bWVudCByb3V0ZWQgdG8gdGhlIFNIRyB0cmVhc3VyeSwgaW4gYmFzaXMgcG9pbnRzLgogICAgLy8gc2VsZi50cmVhc3VyeV9zaGFyZV9icHMgPSBVSW50NjQoODAwMCkgICMgODAlCiAgICBieXRlYyA2IC8vICJ0cmVhc3VyeV9zaGFyZV9icHMiCiAgICBwdXNoaW50IDgwMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjUzCiAgICAvLyBzZWxmLnRvdGFsX2NhbGxzID0gVUludDY0KDApCiAgICBieXRlY18xIC8vICJ0b3RhbF9jYWxscyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weTo1NAogICAgLy8gc2VsZi50b3RhbF9yZXZlbnVlID0gVUludDY0KDApCiAgICBieXRlY18yIC8vICJ0b3RhbF9yZXZlbnVlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBzZWxmLnRvdGFsX3RvX3RyZWFzdXJ5ID0gVUludDY0KDApCiAgICBieXRlY18zIC8vICJ0b3RhbF90b190cmVhc3VyeSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBjbGFzcyBYNDAyR2F0ZXdheShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTQKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDg4NjA1NDAzIDB4MTdmODAxZjcgMHg0MjI2NTAzMSAweDZlZDgxODg5IDB4ZGY1NGU4YWEgLy8gbWV0aG9kICJjb25maWd1cmUoYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgInNldHRsZShheGZlcixzdHJpbmcpdWludDY0IiwgbWV0aG9kICJnZXRfcmVjZWlwdCh1aW50NjQpKGFkZHJlc3Msc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgInJldmVudWVfc3VtbWFyeSgpKHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAib3B0X2luX3RvX2Fzc2V0KHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY29uZmlndXJlIHNldHRsZSBnZXRfcmVjZWlwdCByZXZlbnVlX3N1bW1hcnkgb3B0X2luX3RvX2Fzc2V0CiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54NDAyX2dhdGV3YXkuY29udHJhY3QuWDQwMkdhdGV3YXkuY29uZmlndXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKY29uZmlndXJlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weTo2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluLCAib25seSBhZG1pbiIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gb25seSBhZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weTo2MwogICAgLy8gYXNzZXJ0IHNoYXJlX2JwcyA8PSBVSW50NjQoMTBfMDAwKSwgInNoYXJlIGNhbm5vdCBleGNlZWQgMTAwJSIKICAgIGR1cAogICAgcHVzaGludCAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBzaGFyZSBjYW5ub3QgZXhjZWVkIDEwMCUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6NjUKICAgIC8vIHNlbGYudHJlYXN1cnkgPSB0cmVhc3VyeQogICAgYnl0ZWMgNSAvLyAidHJlYXN1cnkiCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjY2CiAgICAvLyBzZWxmLmFzc2V0X2lkID0gYXNzZXRfaWQKICAgIGJ5dGVjXzAgLy8gImFzc2V0X2lkIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weTo2NwogICAgLy8gc2VsZi50cmVhc3VyeV9zaGFyZV9icHMgPSBzaGFyZV9icHMKICAgIGJ5dGVjIDYgLy8gInRyZWFzdXJ5X3NoYXJlX2JwcyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueDQwMl9nYXRld2F5LmNvbnRyYWN0Llg0MDJHYXRld2F5LnNldHRsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldHRsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6ODEKICAgIC8vIGFzc2VydCBwYXltZW50LnhmZXJfYXNzZXQuaWQgPT0gc2VsZi5hc3NldF9pZCwgIndyb25nIHNldHRsZW1lbnQgYXNzZXQiCiAgICBkaWcgMQogICAgZ3R4bnMgWGZlckFzc2V0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfaWQgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIHdyb25nIHNldHRsZW1lbnQgYXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBwYXltZW50LmFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsICJ3cm9uZyByZWNlaXZlciIKICAgIGRpZyAxCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyB3cm9uZyByZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IHBheW1lbnQuYXNzZXRfYW1vdW50ID4gVUludDY0KDApLCAiYW1vdW50IG11c3QgYmUgcG9zaXRpdmUiCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYXNzZXJ0IC8vIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5hc3NldF9jbG9zZV90byA9PSBHbG9iYWwuemVyb19hZGRyZXNzLCAibXVzdCBub3QgY2xvc2UgYXNzZXQgaG9sZGluZyIKICAgIGRpZyAyCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBtdXN0IG5vdCBjbG9zZSBhc3NldCBob2xkaW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBhc3NlcnQgcGF5bWVudC5yZWtleV90byA9PSBHbG9iYWwuemVyb19hZGRyZXNzLCAibXVzdCBub3QgcmVrZXkiCiAgICBkaWcgMgogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIG11c3Qgbm90IHJla2V5CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5Ojg4CiAgICAvLyB0cmVhc3VyeV9jdXQgPSAoYW1vdW50ICogc2VsZi50cmVhc3VyeV9zaGFyZV9icHMpIC8vIFVJbnQ2NCgxMF8wMDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAidHJlYXN1cnlfc2hhcmVfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRyZWFzdXJ5X3NoYXJlX2JwcyBleGlzdHMKICAgIGRpZyAxCiAgICAqCiAgICBwdXNoaW50IDEwMDAwCiAgICAvCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6OTAKICAgIC8vIHJlY2VpcHRfaWQgPSBzZWxmLnRvdGFsX2NhbGxzICsgVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidG90YWxfY2FsbHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfY2FsbHMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weTo5MgogICAgLy8gcGF5ZXI9YXJjNC5BZGRyZXNzKHBheW1lbnQuc2VuZGVyKSwKICAgIHVuY292ZXIgNAogICAgZ3R4bnMgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhbW91bnQ9YXJjNC5VSW50NjQoYW1vdW50KSwKICAgIGRpZyAzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5Ojk1CiAgICAvLyB0cmVhc3VyeV9zaGFyZT1hcmM0LlVJbnQ2NCh0cmVhc3VyeV9jdXQpLAogICAgZGlnIDMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6OTYKICAgIC8vIHRpbWVzdGFtcD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5Ojk3CiAgICAvLyByb3VuZF9zZXR0bGVkPWFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCksCiAgICBnbG9iYWwgUm91bmQKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6OTEtOTgKICAgIC8vIHNlbGYucmVjZWlwdHNbcmVjZWlwdF9pZF0gPSBQYXltZW50UmVjZWlwdCgKICAgIC8vICAgICBwYXllcj1hcmM0LkFkZHJlc3MocGF5bWVudC5zZW5kZXIpLAogICAgLy8gICAgIHJlc291cmNlX2lkPXJlc291cmNlX2lkLAogICAgLy8gICAgIGFtb3VudD1hcmM0LlVJbnQ2NChhbW91bnQpLAogICAgLy8gICAgIHRyZWFzdXJ5X3NoYXJlPWFyYzQuVUludDY0KHRyZWFzdXJ5X2N1dCksCiAgICAvLyAgICAgdGltZXN0YW1wPWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICAgICByb3VuZF9zZXR0bGVkPWFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCksCiAgICAvLyApCiAgICB1bmNvdmVyIDQKICAgIHB1c2hieXRlcyAweDAwNDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weTo5MQogICAgLy8gc2VsZi5yZWNlaXB0c1tyZWNlaXB0X2lkXSA9IFBheW1lbnRSZWNlaXB0KAogICAgZGlnIDEKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgNQogICAgYnl0ZWMgOCAvLyAweDcyNjM3MDc0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6OTEtOTgKICAgIC8vIHNlbGYucmVjZWlwdHNbcmVjZWlwdF9pZF0gPSBQYXltZW50UmVjZWlwdCgKICAgIC8vICAgICBwYXllcj1hcmM0LkFkZHJlc3MocGF5bWVudC5zZW5kZXIpLAogICAgLy8gICAgIHJlc291cmNlX2lkPXJlc291cmNlX2lkLAogICAgLy8gICAgIGFtb3VudD1hcmM0LlVJbnQ2NChhbW91bnQpLAogICAgLy8gICAgIHRyZWFzdXJ5X3NoYXJlPWFyYzQuVUludDY0KHRyZWFzdXJ5X2N1dCksCiAgICAvLyAgICAgdGltZXN0YW1wPWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICAgICByb3VuZF9zZXR0bGVkPWFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCksCiAgICAvLyApCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMDAKICAgIC8vIHNlbGYudG90YWxfY2FsbHMgPSByZWNlaXB0X2lkCiAgICBieXRlY18xIC8vICJ0b3RhbF9jYWxscyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjEwMQogICAgLy8gc2VsZi50b3RhbF9yZXZlbnVlICs9IGFtb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3JldmVudWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcmV2ZW51ZSBleGlzdHMKICAgIHVuY292ZXIgMgogICAgKwogICAgYnl0ZWNfMiAvLyAidG90YWxfcmV2ZW51ZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjEwMgogICAgLy8gc2VsZi50b3RhbF90b190cmVhc3VyeSArPSB0cmVhc3VyeV9jdXQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF90b190cmVhc3VyeSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF90b190cmVhc3VyeSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICBieXRlY18zIC8vICJ0b3RhbF90b190cmVhc3VyeSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjEwNC0xMDUKICAgIC8vICMgVGhlIFNIRydzIGN1dCBsZWF2ZXMgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhhdCByZWNvcmRlZCBpdC4KICAgIC8vIGlmIHRyZWFzdXJ5X2N1dCA+IFVJbnQ2NCgwKToKICAgIGJ6IHNldHRsZV9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTA2LTExMQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zZWxmLnRyZWFzdXJ5LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD10cmVhc3VyeV9jdXQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjEwNwogICAgLy8geGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMDgKICAgIC8vIGFzc2V0X3JlY2VpdmVyPXNlbGYudHJlYXN1cnksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAidHJlYXN1cnkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudHJlYXN1cnkgZXhpc3RzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMDYKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMTAKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjEwNi0xMTEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c2VsZi50cmVhc3VyeSwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9dHJlYXN1cnlfY3V0LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCnNldHRsZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueDQwMl9nYXRld2F5LmNvbnRyYWN0Llg0MDJHYXRld2F5LmdldF9yZWNlaXB0W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3JlY2VpcHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMveDQwMl9nYXRld2F5L2NvbnRyYWN0LnB5OjExNwogICAgLy8gYXNzZXJ0IHJlY2VpcHRfaWQgaW4gc2VsZi5yZWNlaXB0cywgInVua25vd24gcmVjZWlwdCIKICAgIGl0b2IKICAgIGJ5dGVjIDggLy8gMHg3MjYzNzA3NAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIHVua25vd24gcmVjZWlwdAogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMTgKICAgIC8vIHJldHVybiBzZWxmLnJlY2VpcHRzW3JlY2VpcHRfaWRdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueDQwMl9nYXRld2F5LmNvbnRyYWN0Llg0MDJHYXRld2F5LnJldmVudWVfc3VtbWFyeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJldmVudWVfc3VtbWFyeToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTI1CiAgICAvLyBhcmM0LlVJbnQ2NChzZWxmLnRvdGFsX2NhbGxzKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ0b3RhbF9jYWxscyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jYWxscyBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTI2CiAgICAvLyBhcmM0LlVJbnQ2NChzZWxmLnRvdGFsX3JldmVudWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInRvdGFsX3JldmVudWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcmV2ZW51ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTI3CiAgICAvLyBhcmM0LlVJbnQ2NChzZWxmLnRvdGFsX3RvX3RyZWFzdXJ5KSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF90b190cmVhc3VyeSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF90b190cmVhc3VyeSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTIzLTEyOQogICAgLy8gcmV0dXJuIGFyYzQuVHVwbGUoCiAgICAvLyAgICAgKAogICAgLy8gICAgICAgICBhcmM0LlVJbnQ2NChzZWxmLnRvdGFsX2NhbGxzKSwKICAgIC8vICAgICAgICAgYXJjNC5VSW50NjQoc2VsZi50b3RhbF9yZXZlbnVlKSwKICAgIC8vICAgICAgICAgYXJjNC5VSW50NjQoc2VsZi50b3RhbF90b190cmVhc3VyeSksCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueDQwMl9nYXRld2F5LmNvbnRyYWN0Llg0MDJHYXRld2F5Lm9wdF9pbl90b19hc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdF9pbl90b19hc3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTM0CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluLCAib25seSBhZG1pbiIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gb25seSBhZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMzYtMTQxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMzgKICAgIC8vIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMzkKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTM2CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTQwCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3g0MDJfZ2F0ZXdheS9jb250cmFjdC5weToxMzYtMTQxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94NDAyX2dhdGV3YXkvY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEIBCYJCGFzc2V0X2lkC3RvdGFsX2NhbGxzDXRvdGFsX3JldmVudWURdG90YWxfdG9fdHJlYXN1cnkFYWRtaW4IdHJlYXN1cnkSdHJlYXN1cnlfc2hhcmVfYnBzBBUffHUEcmNwdDEYQAAcJwQyCWcnBTIJZygiZycGgcA+ZykiZyoiZysiZzEbQQAyMRkURDEYRIIFBIhgVAMEF/gB9wRCJlAxBG7YGIkE31ToqjYaAI4FAAkAQgEFASEBPAAxGRQxGBQQQzYaAUkVgSASRDYaAkkVJBJEFzYaA0kVJBJEFzEAIicEZUQSREmBkE4ORCcFTwNnKE8CZycGTGcjQzEWIwlJOBAlEkQ2GgFJIlmBAghLARUSREsBOBEiKGVEEkRLATgUMgoSREsBOBJJREsCOBUyAxJESwI4IDIDEkQiJwZlREsBC4GQTgpJTgQiKWVEIwhPBDgASwMWSwMWMgcWMgYWTwSAAgBCUE8EUE8DUE8CUExQTwRQSwEWSU4FJwhMUEm8SEy/KUxnIiplRE8CCCpMZyIrZURLAQgrTGdBABmxIihlRCInBWVESwOyErIUshElshAisgGzJwdMULAjQzYaAUkVJBJEFxYnCExQSb1FAUS+SCcHTFCwI0MiKWVEFiIqZUQWIitlRBZOAlBMUCcHTFCwI0M2GgFJFSQSRBcxACInBGVEEkSxMgoishKyFLIRJbIQIrIBsyND", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 9, "patch": 0 } }, "events": [], "templateVariables": {} }