{ "name": "AgentRegistry", "structs": { "AgentProfile": [ { "name": "totalScore", "type": "uint64" }, { "name": "feedbackCount", "type": "uint64" }, { "name": "registeredAt", "type": "uint64" }, { "name": "isActive", "type": "uint64" }, { "name": "price", "type": "uint64" }, { "name": "listingTypeCode", "type": "uint64" }, { "name": "agentSlot", "type": "uint64" } ] }, "methods": [ { "name": "createApplication", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "registerWithListing", "args": [ { "type": "byte[]", "name": "listingData" }, { "type": "uint64", "name": "price" }, { "type": "uint64", "name": "typeCode" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Register the calling account as an agent with a service listing.\nlistingData: UTF-8 JSON bytes \u2014 { sellerName, service, description }\nprice: listing price in microALGO\ntypeCode: 0\u20134 listing type code", "events": [], "recommendations": {} }, { "name": "updateListing", "args": [ { "type": "byte[]", "name": "listingData" }, { "type": "uint64", "name": "price" }, { "type": "uint64", "name": "typeCode" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Update a registered agent's listing. Only the agent themselves can call this.", "events": [], "recommendations": {} }, { "name": "deactivateAgent", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Deactivate an agent (admin only).", "events": [], "recommendations": {} }, { "name": "submitFeedback", "args": [ { "type": "address", "name": "agent" }, { "type": "uint64", "name": "score" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Submit a reputation score (0\u2013100) for a registered agent.\nCan be called by any account except the agent themselves.", "events": [], "recommendations": {} }, { "name": "getReputation", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAgentProfile", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "(uint64,uint64,uint64,uint64,uint64,uint64,uint64)", "struct": "AgentProfile" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "isRegistered", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAgentCount", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getTotalFeedbacks", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "pause", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "unpause", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "transferAdmin", "args": [ { "type": "address", "name": "newAdmin" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deleteApplication", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "DeleteApplication" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 3, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "address", "key": "YWRtaW4=" }, "agentCount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YWdlbnRDb3VudA==" }, "totalFeedbacks": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxGZWVkYmFja3M=" }, "paused": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGF1c2Vk" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "agents": { "keyType": "address", "valueType": "AgentProfile", "desc": "Fixed-size profile: reputation + numeric listing fields", "prefix": "YQ==" }, "listings": { "keyType": "address", "valueType": "AVMBytes", "desc": "Variable-size listing metadata: JSON bytes \u2014 { sellerName, service, description }", "prefix": "bA==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 266 ], "errorMessage": "Agent already registered" }, { "pc": [ 404, 516 ], "errorMessage": "Agent is inactive" }, { "pc": [ 387, 454, 494, 563, 609 ], "errorMessage": "Agent not registered" }, { "pc": [ 397 ], "errorMessage": "Box must have value" }, { "pc": [ 506 ], "errorMessage": "Cannot review yourself" }, { "pc": [ 257, 379, 485 ], "errorMessage": "Contract is paused" }, { "pc": [ 271, 391 ], "errorMessage": "Invalid listing type code" }, { "pc": [ 207 ], "errorMessage": "OnCompletion must be DeleteApplication && can only call when not creating" }, { "pc": [ 87 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 500 ], "errorMessage": "Score must be 0-100" }, { "pc": [ 446, 670, 683, 704, 717 ], "errorMessage": "assert target is match for conditions" }, { "pc": [ 255, 276, 377, 444, 483, 539, 643, 655, 668, 681, 702, 715 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 222, 344 ], "errorMessage": "invalid array length header" }, { "pc": [ 230, 352 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 438, 470, 555, 601, 625, 696 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 241, 250, 363, 371, 478 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIKICAgIGJ5dGVjYmxvY2sgImEiICJhZG1pbiIgInBhdXNlZCIgMHgxNTFmN2M3NSAiYWdlbnRDb3VudCIgInRvdGFsRmVlZGJhY2tzIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo0OAogICAgLy8gYWdlbnRDb3VudCAgICAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlYyA0IC8vICJhZ2VudENvdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjQ5CiAgICAvLyB0b3RhbEZlZWRiYWNrcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDUgLy8gInRvdGFsRmVlZGJhY2tzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUwCiAgICAvLyBwYXVzZWQgICAgICAgICA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzIgLy8gInBhdXNlZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjQ2CiAgICAvLyBleHBvcnQgY2xhc3MgQWdlbnRSZWdpc3RyeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweDI0ODdjMzJjIC8vIG1ldGhvZCAiZGVsZXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2RlbGV0ZUFwcGxpY2F0aW9uX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo0NgogICAgLy8gZXhwb3J0IGNsYXNzIEFnZW50UmVnaXN0cnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMjAKICAgIHB1c2hieXRlc3MgMHgzNjAwNTA0YSAweDkxYjEzY2MwIDB4M2U2ZWRkOTggMHgyMWYzNGM5YiAweDhkNjk4NTE3IDB4ZWEwOWQyNGIgMHhkNWRlNGU1NyAweDU3NWU1NDI4IDB4YjczZDBmYWQgMHgwMTc4Zjk0YiAweDFiNTI5ZGU4IDB4N2VlMWI5Y2MgLy8gbWV0aG9kICJyZWdpc3RlcldpdGhMaXN0aW5nKGJ5dGVbXSx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZUxpc3RpbmcoYnl0ZVtdLHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZGVhY3RpdmF0ZUFnZW50KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic3VibWl0RmVlZGJhY2soYWRkcmVzcyx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0UmVwdXRhdGlvbihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0QWdlbnRQcm9maWxlKGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImlzUmVnaXN0ZXJlZChhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0QWdlbnRDb3VudCgpdWludDY0IiwgbWV0aG9kICJnZXRUb3RhbEZlZWRiYWNrcygpdWludDY0IiwgbWV0aG9kICJwYXVzZSgpdm9pZCIsIG1ldGhvZCAidW5wYXVzZSgpdm9pZCIsIG1ldGhvZCAidHJhbnNmZXJBZG1pbihhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCByZWdpc3RlcldpdGhMaXN0aW5nIHVwZGF0ZUxpc3RpbmcgZGVhY3RpdmF0ZUFnZW50IHN1Ym1pdEZlZWRiYWNrIGdldFJlcHV0YXRpb24gZ2V0QWdlbnRQcm9maWxlIGlzUmVnaXN0ZXJlZCBnZXRBZ2VudENvdW50IGdldFRvdGFsRmVlZGJhY2tzIHBhdXNlIHVucGF1c2UgdHJhbnNmZXJBZG1pbgogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDIwOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo0NgogICAgLy8gZXhwb3J0IGNsYXNzIEFnZW50UmVnaXN0cnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwdXNoYnl0ZXMgMHhiODQ0N2IzNiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlQXBwbGljYXRpb24KICAgIGVycgoKbWFpbl9kZWxldGVBcHBsaWNhdGlvbl9yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxOTkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICJEZWxldGVBcHBsaWNhdGlvbiIgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIERlbGV0ZUFwcGxpY2F0aW9uICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVsZXRlQXBwbGljYXRpb24KCgovLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjpBZ2VudFJlZ2lzdHJ5LmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjQ3CiAgICAvLyBhZG1pbiAgICAgICAgICA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCk7CiAgICBieXRlY18xIC8vICJhZG1pbiIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NjEKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBUeG4uc2VuZGVyOwogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NTkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICJOb09wIiwgb25DcmVhdGU6ICJyZXF1aXJlIiB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OkFnZW50UmVnaXN0cnkucmVnaXN0ZXJXaXRoTGlzdGluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlZ2lzdGVyV2l0aExpc3Rpbmc6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjcyLTc2CiAgICAvLyBwdWJsaWMgcmVnaXN0ZXJXaXRoTGlzdGluZygKICAgIC8vICAgbGlzdGluZ0RhdGE6IGJ5dGVzLAogICAgLy8gICBwcmljZTogdWludDY0LAogICAgLy8gICB0eXBlQ29kZTogdWludDY0LAogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KHRoaXMucGF1c2VkLnZhbHVlID09PSBVaW50NjQoMCksICJDb250cmFjdCBpcyBwYXVzZWQiKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUwCiAgICAvLyBwYXVzZWQgICAgICAgICA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzIgLy8gInBhdXNlZCIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NzcKICAgIC8vIGFzc2VydCh0aGlzLnBhdXNlZC52YWx1ZSA9PT0gVWludDY0KDApLCAiQ29udHJhY3QgaXMgcGF1c2VkIik7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIENvbnRyYWN0IGlzIHBhdXNlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1MwogICAgLy8gYWdlbnRzICAgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgYnl0ZWNfMCAvLyAiYSIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NzgKICAgIC8vIGFzc2VydCghdGhpcy5hZ2VudHMoVHhuLnNlbmRlcikuZXhpc3RzLCAiQWdlbnQgYWxyZWFkeSByZWdpc3RlcmVkIik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NzgKICAgIC8vIGFzc2VydCghdGhpcy5hZ2VudHMoVHhuLnNlbmRlcikuZXhpc3RzLCAiQWdlbnQgYWxyZWFkeSByZWdpc3RlcmVkIik7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBBZ2VudCBhbHJlYWR5IHJlZ2lzdGVyZWQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NzkKICAgIC8vIGFzc2VydCh0eXBlQ29kZSA8PSBVaW50NjQoNCksICJJbnZhbGlkIGxpc3RpbmcgdHlwZSBjb2RlIik7CiAgICBkdXAKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA8PQogICAgYXNzZXJ0IC8vIEludmFsaWQgbGlzdGluZyB0eXBlIGNvZGUKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6ODEKICAgIC8vIGNvbnN0IHNsb3QgPSB0aGlzLmFnZW50Q291bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo0OAogICAgLy8gYWdlbnRDb3VudCAgICAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlYyA0IC8vICJhZ2VudENvdW50IgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo4MQogICAgLy8gY29uc3Qgc2xvdCA9IHRoaXMuYWdlbnRDb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjgyLTkwCiAgICAvLyBjb25zdCBwcm9maWxlOiBBZ2VudFByb2ZpbGUgPSB7CiAgICAvLyAgIHRvdGFsU2NvcmU6ICAgICAgVWludDY0KDApLAogICAgLy8gICBmZWVkYmFja0NvdW50OiAgIFVpbnQ2NCgwKSwKICAgIC8vICAgcmVnaXN0ZXJlZEF0OiAgICBzbG90LAogICAgLy8gICBpc0FjdGl2ZTogICAgICAgIFVpbnQ2NCgxKSwKICAgIC8vICAgcHJpY2UsCiAgICAvLyAgIGxpc3RpbmdUeXBlQ29kZTogdHlwZUNvZGUsCiAgICAvLyAgIGFnZW50U2xvdDogICAgICAgc2xvdCwKICAgIC8vIH07CiAgICBkdXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjg2CiAgICAvLyBpc0FjdGl2ZTogICAgICAgIFVpbnQ2NCgxKSwKICAgIGludGNfMSAvLyAxCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjgyLTkwCiAgICAvLyBjb25zdCBwcm9maWxlOiBBZ2VudFByb2ZpbGUgPSB7CiAgICAvLyAgIHRvdGFsU2NvcmU6ICAgICAgVWludDY0KDApLAogICAgLy8gICBmZWVkYmFja0NvdW50OiAgIFVpbnQ2NCgwKSwKICAgIC8vICAgcmVnaXN0ZXJlZEF0OiAgICBzbG90LAogICAgLy8gICBpc0FjdGl2ZTogICAgICAgIFVpbnQ2NCgxKSwKICAgIC8vICAgcHJpY2UsCiAgICAvLyAgIGxpc3RpbmdUeXBlQ29kZTogdHlwZUNvZGUsCiAgICAvLyAgIGFnZW50U2xvdDogICAgICAgc2xvdCwKICAgIC8vIH07CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo5MQogICAgLy8gdGhpcy5hZ2VudHMoVHhuLnNlbmRlcikudmFsdWUgICA9IGNsb25lKHByb2ZpbGUpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1MwogICAgLy8gYWdlbnRzICAgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFnZW50cyhUeG4uc2VuZGVyKS52YWx1ZSAgID0gY2xvbmUocHJvZmlsZSk7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjU1CiAgICAvLyBsaXN0aW5ncyA9IEJveE1hcDxBY2NvdW50LCBieXRlcz4oeyBrZXlQcmVmaXg6ICJsIiB9KTsKICAgIHB1c2hieXRlcyAibCIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OTIKICAgIC8vIHRoaXMubGlzdGluZ3MoVHhuLnNlbmRlcikudmFsdWUgPSBsaXN0aW5nRGF0YTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NTUKICAgIC8vIGxpc3RpbmdzID0gQm94TWFwPEFjY291bnQsIGJ5dGVzPih7IGtleVByZWZpeDogImwiIH0pOwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjkyCiAgICAvLyB0aGlzLmxpc3RpbmdzKFR4bi5zZW5kZXIpLnZhbHVlID0gbGlzdGluZ0RhdGE7CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgdW5jb3ZlciAyCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjkzCiAgICAvLyB0aGlzLmFnZW50Q291bnQudmFsdWUgPSBzbG90ICsgVWludDY0KDEpOwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NDgKICAgIC8vIGFnZW50Q291bnQgICAgID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWMgNCAvLyAiYWdlbnRDb3VudCIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OTMKICAgIC8vIHRoaXMuYWdlbnRDb3VudC52YWx1ZSA9IHNsb3QgKyBVaW50NjQoMSk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo3Mi03NgogICAgLy8gcHVibGljIHJlZ2lzdGVyV2l0aExpc3RpbmcoCiAgICAvLyAgIGxpc3RpbmdEYXRhOiBieXRlcywKICAgIC8vICAgcHJpY2U6IHVpbnQ2NCwKICAgIC8vICAgdHlwZUNvZGU6IHVpbnQ2NCwKICAgIC8vICk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OkFnZW50UmVnaXN0cnkudXBkYXRlTGlzdGluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUxpc3Rpbmc6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjk5LTEwMwogICAgLy8gcHVibGljIHVwZGF0ZUxpc3RpbmcoCiAgICAvLyAgIGxpc3RpbmdEYXRhOiBieXRlcywKICAgIC8vICAgcHJpY2U6IHVpbnQ2NCwKICAgIC8vICAgdHlwZUNvZGU6IHVpbnQ2NCwKICAgIC8vICk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGR1cAogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMDQKICAgIC8vIGFzc2VydCh0aGlzLnBhdXNlZC52YWx1ZSA9PT0gVWludDY0KDApLCAiQ29udHJhY3QgaXMgcGF1c2VkIik7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1MAogICAgLy8gcGF1c2VkICAgICAgICAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18yIC8vICJwYXVzZWQiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjEwNAogICAgLy8gYXNzZXJ0KHRoaXMucGF1c2VkLnZhbHVlID09PSBVaW50NjQoMCksICJDb250cmFjdCBpcyBwYXVzZWQiKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gQ29udHJhY3QgaXMgcGF1c2VkCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMDUKICAgIC8vIGFzc2VydCh0aGlzLmFnZW50cyhUeG4uc2VuZGVyKS5leGlzdHMsICJBZ2VudCBub3QgcmVnaXN0ZXJlZCIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1MwogICAgLy8gYWdlbnRzICAgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjEwNQogICAgLy8gYXNzZXJ0KHRoaXMuYWdlbnRzKFR4bi5zZW5kZXIpLmV4aXN0cywgIkFnZW50IG5vdCByZWdpc3RlcmVkIik7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBZ2VudCBub3QgcmVnaXN0ZXJlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMDYKICAgIC8vIGFzc2VydCh0eXBlQ29kZSA8PSBVaW50NjQoNCksICJJbnZhbGlkIGxpc3RpbmcgdHlwZSBjb2RlIik7CiAgICBwdXNoaW50IDQgLy8gNAogICAgPD0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGxpc3RpbmcgdHlwZSBjb2RlCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMDgKICAgIC8vIGNvbnN0IHByb2ZpbGUgPSBjbG9uZSh0aGlzLmFnZW50cyhUeG4uc2VuZGVyKS52YWx1ZSk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTA4CiAgICAvLyBjb25zdCBwcm9maWxlID0gY2xvbmUodGhpcy5hZ2VudHMoVHhuLnNlbmRlcikudmFsdWUpOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTA5CiAgICAvLyBhc3NlcnQocHJvZmlsZS5pc0FjdGl2ZSA9PT0gVWludDY0KDEpLCAiQWdlbnQgaXMgaW5hY3RpdmUiKTsKICAgIGR1cAogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEFnZW50IGlzIGluYWN0aXZlCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjExMgogICAgLy8gdXBkYXRlZC5wcmljZSAgICAgICAgICAgPSBwcmljZTsKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTIgMzIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTEzCiAgICAvLyB1cGRhdGVkLmxpc3RpbmdUeXBlQ29kZSA9IHR5cGVDb2RlOwogICAgc3dhcAogICAgcmVwbGFjZTIgNDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NTMKICAgIC8vIGFnZW50cyAgID0gQm94TWFwPEFjY291bnQsIEFnZW50UHJvZmlsZT4oeyBrZXlQcmVmaXg6ICJhIiB9KTsKICAgIGJ5dGVjXzAgLy8gImEiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjExNAogICAgLy8gdGhpcy5hZ2VudHMoVHhuLnNlbmRlcikudmFsdWUgICA9IGNsb25lKHVwZGF0ZWQpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1MwogICAgLy8gYWdlbnRzICAgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjExNAogICAgLy8gdGhpcy5hZ2VudHMoVHhuLnNlbmRlcikudmFsdWUgICA9IGNsb25lKHVwZGF0ZWQpOwogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1NQogICAgLy8gbGlzdGluZ3MgPSBCb3hNYXA8QWNjb3VudCwgYnl0ZXM+KHsga2V5UHJlZml4OiAibCIgfSk7CiAgICBwdXNoYnl0ZXMgImwiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjExNQogICAgLy8gdGhpcy5saXN0aW5ncyhUeG4uc2VuZGVyKS52YWx1ZSA9IGxpc3RpbmdEYXRhOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1NQogICAgLy8gbGlzdGluZ3MgPSBCb3hNYXA8QWNjb3VudCwgYnl0ZXM+KHsga2V5UHJlZml4OiAibCIgfSk7CiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLmxpc3RpbmdzKFR4bi5zZW5kZXIpLnZhbHVlID0gbGlzdGluZ0RhdGE7CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo5OS0xMDMKICAgIC8vIHB1YmxpYyB1cGRhdGVMaXN0aW5nKAogICAgLy8gICBsaXN0aW5nRGF0YTogYnl0ZXMsCiAgICAvLyAgIHByaWNlOiB1aW50NjQsCiAgICAvLyAgIHR5cGVDb2RlOiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjpBZ2VudFJlZ2lzdHJ5LmRlYWN0aXZhdGVBZ2VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlYWN0aXZhdGVBZ2VudDoKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTE5CiAgICAvLyBwdWJsaWMgZGVhY3RpdmF0ZUFnZW50KGFnZW50OiBBY2NvdW50KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTIwCiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NDcKICAgIC8vIGFkbWluICAgICAgICAgID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKTsKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMjAKICAgIC8vIGFzc2VydE1hdGNoKFR4biwgeyBzZW5kZXI6IHRoaXMuYWRtaW4udmFsdWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjEyMQogICAgLy8gYXNzZXJ0KHRoaXMuYWdlbnRzKGFnZW50KS5leGlzdHMsICJBZ2VudCBub3QgcmVnaXN0ZXJlZCIpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBZ2VudCBub3QgcmVnaXN0ZXJlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMjUKICAgIC8vIHVwZGF0ZWQuaXNBY3RpdmUgPSBVaW50NjQoMCk7CiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMjUtMTI2CiAgICAvLyB1cGRhdGVkLmlzQWN0aXZlID0gVWludDY0KDApOwogICAgLy8gdGhpcy5hZ2VudHMoYWdlbnQpLnZhbHVlID0gY2xvbmUodXBkYXRlZCk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMTkKICAgIC8vIHB1YmxpYyBkZWFjdGl2YXRlQWdlbnQoYWdlbnQ6IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjpBZ2VudFJlZ2lzdHJ5LnN1Ym1pdEZlZWRiYWNrW3JvdXRpbmddKCkgLT4gdm9pZDoKc3VibWl0RmVlZGJhY2s6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjEzNQogICAgLy8gcHVibGljIHN1Ym1pdEZlZWRiYWNrKGFnZW50OiBBY2NvdW50LCBzY29yZTogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTM2CiAgICAvLyBhc3NlcnQodGhpcy5wYXVzZWQudmFsdWUgPT09IFVpbnQ2NCgwKSwgIkNvbnRyYWN0IGlzIHBhdXNlZCIpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NTAKICAgIC8vIHBhdXNlZCAgICAgICAgID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMiAvLyAicGF1c2VkIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMzYKICAgIC8vIGFzc2VydCh0aGlzLnBhdXNlZC52YWx1ZSA9PT0gVWludDY0KDApLCAiQ29udHJhY3QgaXMgcGF1c2VkIik7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIENvbnRyYWN0IGlzIHBhdXNlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo1MwogICAgLy8gYWdlbnRzICAgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgYnl0ZWNfMCAvLyAiYSIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTM3CiAgICAvLyBhc3NlcnQodGhpcy5hZ2VudHMoYWdlbnQpLmV4aXN0cywgIkFnZW50IG5vdCByZWdpc3RlcmVkIik7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFnZW50IG5vdCByZWdpc3RlcmVkCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjEzOAogICAgLy8gYXNzZXJ0KHNjb3JlIDw9IE1BWF9TQ09SRSwgIlNjb3JlIG11c3QgYmUgMC0xMDAiKTsKICAgIGRpZyAxCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgIDw9CiAgICBhc3NlcnQgLy8gU2NvcmUgbXVzdCBiZSAwLTEwMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxMzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyICE9PSBhZ2VudCwgIkNhbm5vdCByZXZpZXcgeW91cnNlbGYiKTsKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMwogICAgIT0KICAgIGFzc2VydCAvLyBDYW5ub3QgcmV2aWV3IHlvdXJzZWxmCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE0MQogICAgLy8gY29uc3QgcHJvZmlsZSA9IGNsb25lKHRoaXMuYWdlbnRzKGFnZW50KS52YWx1ZSk7CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNDIKICAgIC8vIGFzc2VydChwcm9maWxlLmlzQWN0aXZlID09PSBVaW50NjQoMSksICJBZ2VudCBpcyBpbmFjdGl2ZSIpOwogICAgZHVwCiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gQWdlbnQgaXMgaW5hY3RpdmUKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTQ1CiAgICAvLyB1cGRhdGVkLnRvdGFsU2NvcmUgICAgPSB1cGRhdGVkLnRvdGFsU2NvcmUgICAgKyBzY29yZTsKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICB1bmNvdmVyIDMKICAgICsKICAgIGl0b2IKICAgIHJlcGxhY2UyIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTQ2CiAgICAvLyB1cGRhdGVkLmZlZWRiYWNrQ291bnQgPSB1cGRhdGVkLmZlZWRiYWNrQ291bnQgKyBVaW50NjQoMSk7CiAgICBkdXAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIHJlcGxhY2UyIDgKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTQ3CiAgICAvLyB0aGlzLmFnZW50cyhhZ2VudCkudmFsdWUgPSBjbG9uZSh1cGRhdGVkKTsKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTQ4CiAgICAvLyB0aGlzLnRvdGFsRmVlZGJhY2tzLnZhbHVlID0gdGhpcy50b3RhbEZlZWRiYWNrcy52YWx1ZSArIFVpbnQ2NCgxKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjQ5CiAgICAvLyB0b3RhbEZlZWRiYWNrcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDUgLy8gInRvdGFsRmVlZGJhY2tzIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNDgKICAgIC8vIHRoaXMudG90YWxGZWVkYmFja3MudmFsdWUgPSB0aGlzLnRvdGFsRmVlZGJhY2tzLnZhbHVlICsgVWludDY0KDEpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjQ5CiAgICAvLyB0b3RhbEZlZWRiYWNrcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDUgLy8gInRvdGFsRmVlZGJhY2tzIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNDgKICAgIC8vIHRoaXMudG90YWxGZWVkYmFja3MudmFsdWUgPSB0aGlzLnRvdGFsRmVlZGJhY2tzLnZhbHVlICsgVWludDY0KDEpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTM1CiAgICAvLyBwdWJsaWMgc3VibWl0RmVlZGJhY2soYWdlbnQ6IEFjY291bnQsIHNjb3JlOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjpBZ2VudFJlZ2lzdHJ5LmdldFJlcHV0YXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRSZXB1dGF0aW9uOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE1NQogICAgLy8gYXNzZXJ0KHRoaXMuYWdlbnRzKGFnZW50KS5leGlzdHMsICJBZ2VudCBub3QgcmVnaXN0ZXJlZCIpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBZ2VudCBub3QgcmVnaXN0ZXJlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNTYKICAgIC8vIGNvbnN0IHByb2ZpbGUgPSBjbG9uZSh0aGlzLmFnZW50cyhhZ2VudCkudmFsdWUpOwogICAgYm94X2dldAogICAgcG9wCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTU3CiAgICAvLyBpZiAocHJvZmlsZS5mZWVkYmFja0NvdW50ID09PSBVaW50NjQoMCkpIHJldHVybiBVaW50NjQoMCk7CiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgYm56IGdldFJlcHV0YXRpb25fYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzAgLy8gMAoKZ2V0UmVwdXRhdGlvbl9hZnRlcl9pbmxpbmVkX2NvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OkFnZW50UmVnaXN0cnkuZ2V0UmVwdXRhdGlvbkA0OgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0UmVwdXRhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE1OAogICAgLy8gcmV0dXJuIChwcm9maWxlLnRvdGFsU2NvcmUgKiBTQ0FMRSkgLyBwcm9maWxlLmZlZWRiYWNrQ291bnQ7CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgICoKICAgIGRpZyAxCiAgICAvCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE1MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBiIGdldFJlcHV0YXRpb25fYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjpBZ2VudFJlZ2lzdHJ5LmdldFJlcHV0YXRpb25ANAoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OkFnZW50UmVnaXN0cnkuZ2V0QWdlbnRQcm9maWxlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0QWdlbnRQcm9maWxlOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNjEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudHMgICA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KHRoaXMuYWdlbnRzKGFnZW50KS5leGlzdHMsICJBZ2VudCBub3QgcmVnaXN0ZXJlZCIpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBZ2VudCBub3QgcmVnaXN0ZXJlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNjQKICAgIC8vIHJldHVybiBjbG9uZSh0aGlzLmFnZW50cyhhZ2VudCkudmFsdWUpOwogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE2MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo6QWdlbnRSZWdpc3RyeS5pc1JlZ2lzdGVyZWRbcm91dGluZ10oKSAtPiB2b2lkOgppc1JlZ2lzdGVyZWQ6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE2NwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NTMKICAgIC8vIGFnZW50cyAgID0gQm94TWFwPEFjY291bnQsIEFnZW50UHJvZmlsZT4oeyBrZXlQcmVmaXg6ICJhIiB9KTsKICAgIGJ5dGVjXzAgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTY5CiAgICAvLyByZXR1cm4gdGhpcy5hZ2VudHMoYWdlbnQpLmV4aXN0cyA/IFVpbnQ2NCgxKSA6IFVpbnQ2NCgwKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OkFnZW50UmVnaXN0cnkuZ2V0QWdlbnRDb3VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldEFnZW50Q291bnQ6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE3NAogICAgLy8gcmV0dXJuIHRoaXMuYWdlbnRDb3VudC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjQ4CiAgICAvLyBhZ2VudENvdW50ICAgICA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDQgLy8gImFnZW50Q291bnQiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE3NAogICAgLy8gcmV0dXJuIHRoaXMuYWdlbnRDb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE3MgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo6QWdlbnRSZWdpc3RyeS5nZXRUb3RhbEZlZWRiYWNrc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFRvdGFsRmVlZGJhY2tzOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNzkKICAgIC8vIHJldHVybiB0aGlzLnRvdGFsRmVlZGJhY2tzLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NDkKICAgIC8vIHRvdGFsRmVlZGJhY2tzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWMgNSAvLyAidG90YWxGZWVkYmFja3MiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE3OQogICAgLy8gcmV0dXJuIHRoaXMudG90YWxGZWVkYmFja3MudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxNzcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OkFnZW50UmVnaXN0cnkucGF1c2Vbcm91dGluZ10oKSAtPiB2b2lkOgpwYXVzZToKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTg1CiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NDcKICAgIC8vIGFkbWluICAgICAgICAgID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKTsKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxODUKICAgIC8vIGFzc2VydE1hdGNoKFR4biwgeyBzZW5kZXI6IHRoaXMuYWRtaW4udmFsdWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjUwCiAgICAvLyBwYXVzZWQgICAgICAgICA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzIgLy8gInBhdXNlZCIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTg2CiAgICAvLyB0aGlzLnBhdXNlZC52YWx1ZSA9IFVpbnQ2NCgxKTsKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxODQKICAgIC8vIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjpBZ2VudFJlZ2lzdHJ5LnVucGF1c2Vbcm91dGluZ10oKSAtPiB2b2lkOgp1bnBhdXNlOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxOTAKICAgIC8vIGFzc2VydE1hdGNoKFR4biwgeyBzZW5kZXI6IHRoaXMuYWRtaW4udmFsdWUgfSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo0NwogICAgLy8gYWRtaW4gICAgICAgICAgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE5MAogICAgLy8gYXNzZXJ0TWF0Y2goVHhuLCB7IHNlbmRlcjogdGhpcy5hZG1pbi52YWx1ZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFzc2VydCB0YXJnZXQgaXMgbWF0Y2ggZm9yIGNvbmRpdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NTAKICAgIC8vIHBhdXNlZCAgICAgICAgID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMiAvLyAicGF1c2VkIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoxOTEKICAgIC8vIHRoaXMucGF1c2VkLnZhbHVlID0gVWludDY0KDApOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE4OQogICAgLy8gcHVibGljIHVucGF1c2UoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo6QWdlbnRSZWdpc3RyeS50cmFuc2ZlckFkbWluW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJBZG1pbjoKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTk0CiAgICAvLyBwdWJsaWMgdHJhbnNmZXJBZG1pbihuZXdBZG1pbjogQWNjb3VudCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE5NQogICAgLy8gYXNzZXJ0TWF0Y2goVHhuLCB7IHNlbmRlcjogdGhpcy5hZG1pbi52YWx1ZSB9KTsKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjQ3CiAgICAvLyBhZG1pbiAgICAgICAgICA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCk7CiAgICBieXRlY18xIC8vICJhZG1pbiIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTk1CiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czo0NwogICAgLy8gYWRtaW4gICAgICAgICAgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE5NgogICAgLy8gdGhpcy5hZG1pbi52YWx1ZSA9IG5ld0FkbWluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MTk0CiAgICAvLyBwdWJsaWMgdHJhbnNmZXJBZG1pbihuZXdBZG1pbjogQWNjb3VudCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6OkFnZW50UmVnaXN0cnkuZGVsZXRlQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGVBcHBsaWNhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6MjAxCiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlZ2lzdHJ5LmFsZ28udHM6NDcKICAgIC8vIGFkbWluICAgICAgICAgID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKTsKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVnaXN0cnkuYWxnby50czoyMDEKICAgIC8vIGFzc2VydE1hdGNoKFR4biwgeyBzZW5kZXI6IHRoaXMuYWRtaW4udmFsdWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZWdpc3RyeS5hbGdvLnRzOjE5OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogIkRlbGV0ZUFwcGxpY2F0aW9uIiB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEIICYGAWEFYWRtaW4GcGF1c2VkBBUffHUKYWdlbnRDb3VudA50b3RhbEZlZWRiYWNrczEYQAALJwQiZycFImcqImeABCSHwyw2GgCOAQBzMRkURDEYQQBcggwENgBQSgSRsTzABD5u3ZgEIfNMmwSNaYUXBOoJ0ksE1d5OVwRXXlQoBLc9D60EAXj5SwQbUp3oBH7hucw2GgCODAAhAJsA9wEXAWwBmgGyAccB0wHfAewB+QCABLhEezY2GgCOAQANADEZgQUSMRgQREIB8ykxAGcjQzYaAUkiWYECCEsBFRJEVwIANhoCSRUkEkQXNhoDSRUkEkQXIiplRBREKDEAUL1FARRESYEEDkQiJwRlREkWgBAAAAAAAAAAAAAAAAAAAAAASwFQIxZQTwQWUE8DFlBMUCgxAFBMv4ABbDEAUEm8SE8CvyMIJwRMZyNDNhoBSSJZgQIISwEVEkRXAgA2GgJJFSQSRDYaA0kVJBJESRciKmVEFEQoMQBQvUUBRIEEDkQoMQBQvkRJgRhbIxJETwJcIExcKCgxAFBMv4ABbDEAUEm8SEy/I0M2GgFJFSUSRDEAIillRBJEKExQSb1FAUQiFoEYTLsjQzYaAUkVJRJENhoCSRUkEkQXIiplRBREKEsCUEm9RQFESwGBZA5EMQBPAxNESb5ISYEYWyMSREkiW08DCBZcAEkkWyMIFlwIvyInBWVEIwgnBUxnI0M2GgFJFSUSRChMUEm9RQFEvkhJJFtJQAAIIhYrTFCwI0NLASJbgWQLSwEKQv/sNhoBSRUlEkQoTFBJvUUBRL5IK0xQsCNDNhoBSRUlEkQoTFC9RQEWK0xQsCNDIicEZUQWK0xQsCNDIicFZUQWK0xQsCNDMQAiKWVEEkQqI2cjQzEAIillRBJEKiJnI0M2GgFJFSUSRDEAIillRBJEKUxnI0MxACIpZUQSRCND", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }