abel-ghost-sdk 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1388 @@
1
+ import { getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56';
2
+ import { AppClient as _AppClient, } from '@algorandfoundation/algokit-utils/types/app-client';
3
+ import { AppFactory as _AppFactory } from '@algorandfoundation/algokit-utils/types/app-factory';
4
+ export const APP_SPEC = { "name": "RetiReader", "structs": { "NodePoolAssignmentConfig": [{ "name": "nodes", "type": "(uint64[3])[8]" }], "PoolInfo": [{ "name": "poolAppId", "type": "uint64" }, { "name": "totalStakers", "type": "uint16" }, { "name": "totalAlgoStaked", "type": "uint64" }], "ValidatorConfig": [{ "name": "id", "type": "uint64" }, { "name": "owner", "type": "address" }, { "name": "manager", "type": "address" }, { "name": "nfdForInfo", "type": "uint64" }, { "name": "entryGatingType", "type": "uint8" }, { "name": "entryGatingAddress", "type": "address" }, { "name": "entryGatingAssets", "type": "uint64[4]" }, { "name": "gatingAssetMinBalance", "type": "uint64" }, { "name": "rewardTokenId", "type": "uint64" }, { "name": "rewardPerPayout", "type": "uint64" }, { "name": "epochRoundLength", "type": "uint32" }, { "name": "percentToValidator", "type": "uint32" }, { "name": "validatorCommissionAddress", "type": "address" }, { "name": "minEntryStake", "type": "uint64" }, { "name": "maxAlgoPerPool", "type": "uint64" }, { "name": "poolsPerNode", "type": "uint8" }, { "name": "sunsettingOn", "type": "uint64" }, { "name": "sunsettingTo", "type": "uint64" }], "ValidatorCurState": [{ "name": "numPools", "type": "uint16" }, { "name": "totalStakers", "type": "uint64" }, { "name": "totalAlgoStaked", "type": "uint64" }, { "name": "rewardTokenHeldBack", "type": "uint64" }], "AllPoolInfo": [{ "name": "config", "type": "ValidatorConfig" }, { "name": "state", "type": "ValidatorCurState" }, { "name": "poolInfo", "type": "(uint64,uint16,uint64)[]" }, { "name": "nodeAssignment", "type": "NodePoolAssignmentConfig" }], "ValidatorPoolInfo": [{ "name": "validatorId", "type": "uint64" }, { "name": "poolInfo", "type": "PoolInfo" }] }, "methods": [{ "name": "getValidatorConfig", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", "struct": "ValidatorConfig" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getValidatorStates", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "(uint16,uint64,uint64,uint64)", "struct": "ValidatorCurState" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getPools", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "(uint64,(uint64,uint16,uint64))", "struct": "ValidatorPoolInfo" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getNodePoolAssignments", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "((uint64[3])[8])", "struct": "NodePoolAssignmentConfig" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAllPoolInfo", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))", "struct": "AllPoolInfo" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getBlockTimestamps", "args": [{ "type": "uint64", "name": "num" }], "returns": { "type": "uint64" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAlgodVersion", "args": [{ "type": "uint64[]", "name": "poolAppIds" }], "returns": { "type": "string" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }], "arcs": [22, 28], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": ["DeleteApplication", "UpdateApplication"] }, "sourceInfo": { "approval": { "sourceInfo": [{ "pc": [1663, 1716, 1768, 1827], "errorMessage": "Bytes has valid prefix" }, { "pc": [54], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [122], "errorMessage": "OnCompletion must be one of UpdateApplication, DeleteApplication && can only call when not creating" }, { "pc": [600], "errorMessage": "index access is out of bounds" }, { "pc": [144, 458, 528, 571, 641, 905, 1545, 1771], "errorMessage": "invalid array length header" }, { "pc": [1834], "errorMessage": "invalid number of bytes for NodePoolAssignmentConfig" }, { "pc": [1670], "errorMessage": "invalid number of bytes for ValidatorConfig" }, { "pc": [1722], "errorMessage": "invalid number of bytes for ValidatorCurState" }, { "pc": [1781], "errorMessage": "invalid number of bytes for arc4.dynamic_array<PoolInfo>" }, { "pc": [155, 469, 539, 652, 916, 1556], "errorMessage": "invalid number of bytes for arc4.dynamic_array<uint64>" }, { "pc": [136, 450, 520, 633, 897, 1490], "errorMessage": "invalid number of bytes for arc4.uint64" }], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNsYXNzIFJldGlSZWFkZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZG1pbk9ubHlAMTQKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICBwdXNoYnl0ZXNzIDB4ODRjNDQyNWEgMHgyNGUwMGM4MCAweGJiODgyOTI3IDB4YTYyZjExMzIgMHhkODVhY2I0YyAweDNkM2I4YjRhIDB4YmI0NjBiZWUgLy8gbWV0aG9kICJnZXRWYWxpZGF0b3JDb25maWcodWludDY0LHVpbnQ2NFtdKSh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAiZ2V0VmFsaWRhdG9yU3RhdGVzKHVpbnQ2NCx1aW50NjRbXSkodWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAiZ2V0UG9vbHModWludDY0LHVpbnQ2NFtdKSh1aW50NjQsKHVpbnQ2NCx1aW50MTYsdWludDY0KSkiLCBtZXRob2QgImdldE5vZGVQb29sQXNzaWdubWVudHModWludDY0LHVpbnQ2NFtdKSgodWludDY0WzNdKVs4XSkiLCBtZXRob2QgImdldEFsbFBvb2xJbmZvKHVpbnQ2NCx1aW50NjRbXSkoKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpLCh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDE2LHVpbnQ2NClbXSwoKHVpbnQ2NFszXSlbOF0pKSIsIG1ldGhvZCAiZ2V0QmxvY2tUaW1lc3RhbXBzKHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgImdldEFsZ29kVmVyc2lvbih1aW50NjRbXSlzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBnZXRWYWxpZGF0b3JDb25maWcgZ2V0VmFsaWRhdG9yU3RhdGVzIGdldFBvb2xzIGdldE5vZGVQb29sQXNzaWdubWVudHMgZ2V0QWxsUG9vbEluZm8gZ2V0QmxvY2tUaW1lc3RhbXBzIGdldEFsZ29kVmVyc2lvbgogICAgZXJyCgptYWluX2FkbWluT25seUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBAYmFyZW1ldGhvZCh7IGFsbG93QWN0aW9uczogWyJVcGRhdGVBcHBsaWNhdGlvbiIsICJEZWxldGVBcHBsaWNhdGlvbiJdIH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDQ4IC8vIDQ4CiAgICAmCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBvbmUgb2YgVXBkYXRlQXBwbGljYXRpb24sIERlbGV0ZUFwcGxpY2F0aW9uICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gR2xvYmFsLmNyZWF0b3JBZGRyZXNzKTsKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBAYmFyZW1ldGhvZCh7IGFsbG93QWN0aW9uczogWyJVcGRhdGVBcHBsaWNhdGlvbiIsICJEZWxldGVBcHBsaWNhdGlvbiJdIH0pCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRWYWxpZGF0b3JDb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRWYWxpZGF0b3JDb25maWc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHVpbnQ2ND4KICAgIGludGNfMCAvLyAwCgpnZXRWYWxpZGF0b3JDb25maWdfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIGZvciAoY29uc3QgdmFsaWRhdG9ySWQgb2YgdmFsaWRhdG9ySWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXRWYWxpZGF0b3JDb25maWdfYWZ0ZXJfZm9yQDUKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gbG9nKGVuY29kZUFyYzQodGhpcy5nZXRSZW1vdGVWYWxpZGF0b3JDb25maWcocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpKSk7CiAgICBkaWcgNQogICAgc3dhcAogICAgY2FsbHN1YiBnZXRSZW1vdGVWYWxpZGF0b3JDb25maWcKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRWYWxpZGF0b3JDb25maWdfZm9yX2hlYWRlckAyCgpnZXRWYWxpZGF0b3JDb25maWdfYWZ0ZXJfZm9yQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgcHVzaGJ5dGVzIGJhc2UzMihDVVBYWTVJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBKQogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0VmFsaWRhdG9yU3RhdGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0VmFsaWRhdG9yU3RhdGVzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0VmFsaWRhdG9yU3RhdGVzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyBmb3IgKGNvbnN0IHZhbGlkYXRvcklkIG9mIHZhbGlkYXRvcklkcykgewogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogZ2V0VmFsaWRhdG9yU3RhdGVzX2FmdGVyX2ZvckA1CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGxvZyhlbmNvZGVBcmM0KHRoaXMuZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpKSk7CiAgICBkaWcgNQogICAgc3dhcAogICAgY2FsbHN1YiBnZXRSZW1vdGVWYWxpZGF0b3JTdGF0ZQogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldFZhbGlkYXRvclN0YXRlc19mb3JfaGVhZGVyQDIKCmdldFZhbGlkYXRvclN0YXRlc19hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRQb29sc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFBvb2xzOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0UG9vbHNfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OTAKICAgIC8vIGZvciAoY29uc3QgdmFsaWRhdG9ySWQgb2YgdmFsaWRhdG9ySWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXRQb29sc19hZnRlcl9mb3JAOQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIGNvbnN0IHBvb2xJbmZvQXJyID0gdGhpcy5nZXRSZW1vdGVQb29sSW5mbyhyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCk7CiAgICBkaWcgNAogICAgc3dhcAogICAgY2FsbHN1YiBnZXRSZW1vdGVQb29sSW5mbwogICAgZHVwCiAgICBidXJ5IDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjkyCiAgICAvLyBmb3IgKGNvbnN0IHBvb2xJbmZvIG9mIGNsb25lKHBvb2xJbmZvQXJyKSkgewogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGJ1cnkgNwogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNgoKZ2V0UG9vbHNfZm9yX2hlYWRlckA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIGZvciAoY29uc3QgcG9vbEluZm8gb2YgY2xvbmUocG9vbEluZm9BcnIpKSB7CiAgICBkaWcgNQogICAgZGlnIDcKICAgIDwKICAgIGJ6IGdldFBvb2xzX2FmdGVyX2ZvckA3CiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgICoKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIGxvZyhlbmNvZGVBcmM0KHsgdmFsaWRhdG9ySWQsIHBvb2xJbmZvIH0pKTsKICAgIGRpZyA2CiAgICBpdG9iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNgogICAgYiBnZXRQb29sc19mb3JfaGVhZGVyQDQKCmdldFBvb2xzX2FmdGVyX2ZvckA3OgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldFBvb2xzX2Zvcl9oZWFkZXJAMgoKZ2V0UG9vbHNfYWZ0ZXJfZm9yQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldE5vZGVQb29sQXNzaWdubWVudHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c19mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjAKICAgIC8vIGZvciAoY29uc3QgdmFsaWRhdG9ySWQgb2YgdmFsaWRhdG9ySWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXROb2RlUG9vbEFzc2lnbm1lbnRzX2FmdGVyX2ZvckA1CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBsb2coZW5jb2RlQXJjNCh0aGlzLmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHMocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpKSk7CiAgICBkaWcgNQogICAgc3dhcAogICAgY2FsbHN1YiBnZXRSZW1vdGVOb2RlUG9vbEFzc2lnbm1lbnRzCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c19mb3JfaGVhZGVyQDIKCmdldE5vZGVQb29sQXNzaWdubWVudHNfYWZ0ZXJfZm9yQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRBbGxQb29sSW5mb1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldEFsbFBvb2xJbmZvOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0PgogICAgaW50Y18wIC8vIDAKCmdldEFsbFBvb2xJbmZvX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE0MgogICAgLy8gZm9yIChjb25zdCB2YWxpZGF0b3JJZCBvZiB2YWxpZGF0b3JJZHMpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGdldEFsbFBvb2xJbmZvX2FmdGVyX2ZvckA1CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyBjb25zdCBjb25maWcgPSB0aGlzLmdldFJlbW90ZVZhbGlkYXRvckNvbmZpZyhyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCk7CiAgICBkaWcgNQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgY2FsbHN1YiBnZXRSZW1vdGVWYWxpZGF0b3JDb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gY29uc3Qgc3RhdGUgPSB0aGlzLmdldFJlbW90ZVZhbGlkYXRvclN0YXRlKHJlZ2lzdHJ5QXBwSWQsIHZhbGlkYXRvcklkKTsKICAgIGRpZyAyCiAgICBkaWcgMgogICAgY2FsbHN1YiBnZXRSZW1vdGVWYWxpZGF0b3JTdGF0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBjb25zdCBwb29sSW5mbyA9IHRoaXMuZ2V0UmVtb3RlUG9vbEluZm8ocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpOwogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIGdldFJlbW90ZVBvb2xJbmZvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIGNvbnN0IG5vZGVBc3NpZ25tZW50ID0gdGhpcy5nZXRSZW1vdGVOb2RlUG9vbEFzc2lnbm1lbnRzKHJlZ2lzdHJ5QXBwSWQsIHZhbGlkYXRvcklkKTsKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIGdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE1MC0xNTUKICAgIC8vIGNvbnN0IGFsbFBvb2xJbmZvOiBBbGxQb29sSW5mbyA9IHsKICAgIC8vICAgY29uZmlnOiBjbG9uZShjb25maWcpLAogICAgLy8gICBzdGF0ZTogY2xvbmUoc3RhdGUpLAogICAgLy8gICBwb29sSW5mbzogY2xvbmUocG9vbEluZm8pLAogICAgLy8gICBub2RlQXNzaWdubWVudDogY2xvbmUobm9kZUFzc2lnbm1lbnQpLAogICAgLy8gfTsKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAxY2UKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gbG9nKGVuY29kZUFyYzQoYWxsUG9vbEluZm8pKTsKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRBbGxQb29sSW5mb19mb3JfaGVhZGVyQDIKCmdldEFsbFBvb2xJbmZvX2FmdGVyX2ZvckA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgYmFzZTMyKENVUFhZNUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEVFFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRCbG9ja1RpbWVzdGFtcHNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCbG9ja1RpbWVzdGFtcHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gZm9yIChsZXQgcm91bmQ6IHVpbnQ2NCA9IFR4bi5sYXN0VmFsaWQgLSBudW0gLSAxOyByb3VuZCA8IFR4bi5maXJzdFZhbGlkIC0gMTsgcm91bmQrKykgewogICAgdHhuIExhc3RWYWxpZAogICAgc3dhcAogICAgLQogICAgaW50Y18xIC8vIDEKICAgIC0KCmdldEJsb2NrVGltZXN0YW1wc193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gZm9yIChsZXQgcm91bmQ6IHVpbnQ2NCA9IFR4bi5sYXN0VmFsaWQgLSBudW0gLSAxOyByb3VuZCA8IFR4bi5maXJzdFZhbGlkIC0gMTsgcm91bmQrKykgewogICAgdHhuIEZpcnN0VmFsaWQKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgPgogICAgYnogZ2V0QmxvY2tUaW1lc3RhbXBzX2FmdGVyX3doaWxlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gbG9nKG9wLkJsb2NrLmJsa1RpbWVzdGFtcChyb3VuZCkpOwogICAgZHVwbiAyCiAgICBibG9jayBCbGtUaW1lc3RhbXAKICAgIGl0b2IKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyBmb3IgKGxldCByb3VuZDogdWludDY0ID0gVHhuLmxhc3RWYWxpZCAtIG51bSAtIDE7IHJvdW5kIDwgVHhuLmZpcnN0VmFsaWQgLSAxOyByb3VuZCsrKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldEJsb2NrVGltZXN0YW1wc193aGlsZV90b3BAMgoKZ2V0QmxvY2tUaW1lc3RhbXBzX2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0QWxnb2RWZXJzaW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0QWxnb2RWZXJzaW9uOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHVpbnQ2ND4KICAgIGludGNfMCAvLyAwCgpnZXRBbGdvZFZlcnNpb25fZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTc3CiAgICAvLyBmb3IgKGNvbnN0IHBvb2xBcHBJZCBvZiBwb29sQXBwSWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXRBbGdvZFZlcnNpb25fYWZ0ZXJfZm9yQDgKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBjb25zdCBbYWxnb2RWZXIsIGV4aXN0c10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcyhwb29sQXBwSWQsIEJ5dGVzYGFsZ29kVmVyYCk7CiAgICBwdXNoYnl0ZXMgImFsZ29kVmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBpZiAoZXhpc3RzKSB7CiAgICBieiBnZXRBbGdvZFZlcnNpb25fZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gbG9nKGFsZ29kVmVyKTsKICAgIGRpZyAzCiAgICBsb2cKCmdldEFsZ29kVmVyc2lvbl9hZnRlcl9pZl9lbHNlQDY6CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0QWxnb2RWZXJzaW9uX2Zvcl9oZWFkZXJAMgoKZ2V0QWxnb2RWZXJzaW9uX2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBsb2coQnl0ZXNgYCk7CiAgICBieXRlY18yIC8vICIiCiAgICBsb2cKICAgIGIgZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2lmX2Vsc2VANgoKZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2ZvckA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldFJlbW90ZVZhbGlkYXRvckNvbmZpZyhyZWdpc3RyeUFwcElkOiB1aW50NjQsIHZhbGlkYXRvcklkOiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRSZW1vdGVWYWxpZGF0b3JDb25maWc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcHJpdmF0ZSBnZXRSZW1vdGVWYWxpZGF0b3JDb25maWcocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogVmFsaWRhdG9yQ29uZmlnIHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MzQtMzcKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvckNvbmZpZyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czozNgogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MzQtMzcKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvckNvbmZpZyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3NWFmZjYxZCAvLyBtZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDI0MiAvLyAyNDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIFZhbGlkYXRvckNvbmZpZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KSAtPiBieXRlczoKZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo3MQogICAgLy8gcHJpdmF0ZSBnZXRSZW1vdGVWYWxpZGF0b3JTdGF0ZShyZWdpc3RyeUFwcElkOiB1aW50NjQsIHZhbGlkYXRvcklkOiB1aW50NjQpOiBWYWxpZGF0b3JDdXJTdGF0ZSB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjcyLTc1CiAgICAvLyByZXR1cm4gY29tcGlsZUFyYzQoUmV0aSkuY2FsbC5nZXRWYWxpZGF0b3JTdGF0ZSh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6NzItNzUKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvclN0YXRlKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweDFmMmYwMTA5IC8vIG1ldGhvZCAiZ2V0VmFsaWRhdG9yU3RhdGUodWludDY0KSh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDI2IC8vIDI2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBWYWxpZGF0b3JDdXJTdGF0ZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0UmVtb3RlUG9vbEluZm8ocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KSAtPiBieXRlczoKZ2V0UmVtb3RlUG9vbEluZm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlUG9vbEluZm8ocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogUG9vbEluZm9bXSB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjEwMS0xMDQKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFBvb2xzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTAxLTEwNAogICAgLy8gcmV0dXJuIGNvbXBpbGVBcmM0KFJldGkpLmNhbGwuZ2V0UG9vbHMoewogICAgLy8gICBhcHBJZDogcmVnaXN0cnlBcHBJZCwKICAgIC8vICAgYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4OTEwZTk0YWMgLy8gbWV0aG9kICJnZXRQb29scyh1aW50NjQpKHVpbnQ2NCx1aW50MTYsdWludDY0KVtdIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8UG9vbEluZm8+CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRSZW1vdGVOb2RlUG9vbEFzc2lnbm1lbnRzKHJlZ2lzdHJ5QXBwSWQ6IHVpbnQ2NCwgdmFsaWRhdG9ySWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlTm9kZVBvb2xBc3NpZ25tZW50cyhyZWdpc3RyeUFwcElkOiB1aW50NjQsIHZhbGlkYXRvcklkOiB1aW50NjQpOiBOb2RlUG9vbEFzc2lnbm1lbnRDb25maWcgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjctMTMwCiAgICAvLyByZXR1cm4gY29tcGlsZUFyYzQoUmV0aSkuY2FsbC5nZXROb2RlUG9vbEFzc2lnbm1lbnRzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTI3LTEzMAogICAgLy8gcmV0dXJuIGNvbXBpbGVBcmM0KFJldGkpLmNhbGwuZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmJiNmM4ZCAvLyBtZXRob2QgImdldE5vZGVQb29sQXNzaWdubWVudHModWludDY0KSgodWludDY0WzNdKVs4XSkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTkyIC8vIDE5MgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgTm9kZVBvb2xBc3NpZ25tZW50Q29uZmlnCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEIAiYDBBUffHUeFR98dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEbQQA9MRkURIIHBITEQloEJOAMgAS7iCknBKYvETIE2FrLTAQ9O4tKBLtGC+42GgCOBwASAUwBjgIDAwsFXAWTACMxGZCBMBoxGBBEMQAyCRJDNhoBSRUkEkQXNhoCRwIiWUlOAiQLJQhMFRJEIklLAgxBABtLAlcCAEsBSU4CJAtbSwVMiAWcsCMIRQFC/96A9gEVH3x1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwI0M2GgFJFSQSRBc2GgJHAiJZSU4CJAslCEwVEkQiSUsCDEEAG0sCVwIASwFJTgIkC1tLBUyIBJewIwhFAUL/3imwI0MiKkcCNhoBSRUkEkQXNhoCRwIiWUlOAiQLJQhMFRJEIklLAgxBAEpLAlcCAEsBJAtbSUUGSwRMiASFSUUJIllFByJFBksFSwcMQQAdSwdXAgBLBklOAoESC4ESWEsGFkxQsCMIRQZC/9tJIwhFAUL/rymwI0M2GgFJFSQSRBc2GgJHAiJZSU4CJAslCEwVEkQiSUsCDEEAG0sCVwIASwFJTgIkC1tLBUyIBE+wIwhFAUL/3oDEARUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwI0M2GgFJFSQSRBc2GgJHAiJZSU4CJAslCEwVEkQiSUsCDEEAQksCVwIASwFJTgIkC1tLBUlOAksBiAKfSwJLAogCzUsDSwOIAvpPBE8EiAMuTwNPA1CAAgHOUExQTFCwIwhFAUL/t4DmAxUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAALAjQzYaAUkVJBJEFzEETAkjCTECIwlLAQ1BAA1HAtEBFrAjCEUBQv/pgAwVH3x1AAAAAAAAAACwI0MiNhoBRwIiWUlOAiQLJQhMFRJEIklLAgxBACtLAlcCAEsBJAtbgAhhbGdvZFZlcmVMRQVBAAtLA7BJIwhFAUL/0yqwQv/zgAYVH3x1AACwI0OKAgGxi/8WgAR1r/YdshqyGiKyGYv+shiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJFYHyARJEiYoCAbGL/xaABB8vAQmyGrIaIrIZi/6yGIEGshAisgGztD5JVwQATFcABCgSREkVgRoSRImKAgGxi/8WgASRDpSsshqyGiKyGYv+shiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJIlmBEgslCEsBFRJEiYoCAbGL/xaABHu7bI2yGrIaIrIZi/6yGIEGshAisgGztD5JVwQATFcABCgSREkVgcABEkSJ", "clear": "C4EBQw==" }, "events": [], "templateVariables": {} };
5
+ class BinaryStateValue {
6
+ value;
7
+ constructor(value) {
8
+ this.value = value;
9
+ }
10
+ asByteArray() {
11
+ return this.value;
12
+ }
13
+ asString() {
14
+ return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined;
15
+ }
16
+ }
17
+ /**
18
+ * Converts the ABI tuple representation of a NodePoolAssignmentConfig to the struct representation
19
+ */
20
+ export function NodePoolAssignmentConfigFromTuple(abiTuple) {
21
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.NodePoolAssignmentConfig, APP_SPEC.structs);
22
+ }
23
+ /**
24
+ * Converts the ABI tuple representation of a PoolInfo to the struct representation
25
+ */
26
+ export function PoolInfoFromTuple(abiTuple) {
27
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.PoolInfo, APP_SPEC.structs);
28
+ }
29
+ /**
30
+ * Converts the ABI tuple representation of a ValidatorConfig to the struct representation
31
+ */
32
+ export function ValidatorConfigFromTuple(abiTuple) {
33
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorConfig, APP_SPEC.structs);
34
+ }
35
+ /**
36
+ * Converts the ABI tuple representation of a ValidatorCurState to the struct representation
37
+ */
38
+ export function ValidatorCurStateFromTuple(abiTuple) {
39
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorCurState, APP_SPEC.structs);
40
+ }
41
+ /**
42
+ * Converts the ABI tuple representation of a AllPoolInfo to the struct representation
43
+ */
44
+ export function AllPoolInfoFromTuple(abiTuple) {
45
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AllPoolInfo, APP_SPEC.structs);
46
+ }
47
+ /**
48
+ * Converts the ABI tuple representation of a ValidatorPoolInfo to the struct representation
49
+ */
50
+ export function ValidatorPoolInfoFromTuple(abiTuple) {
51
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorPoolInfo, APP_SPEC.structs);
52
+ }
53
+ /**
54
+ * Exposes methods for constructing `AppClient` params objects for ABI calls to the RetiReader smart contract
55
+ */
56
+ export class RetiReaderParamsFactory {
57
+ /**
58
+ * Gets available create ABI call param factories
59
+ */
60
+ static get create() {
61
+ return {
62
+ _resolveByMethod(params) {
63
+ switch (params.method) {
64
+ case 'getValidatorConfig':
65
+ case 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)':
66
+ return RetiReaderParamsFactory.create.getValidatorConfig(params);
67
+ case 'getValidatorStates':
68
+ case 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)':
69
+ return RetiReaderParamsFactory.create.getValidatorStates(params);
70
+ case 'getPools':
71
+ case 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))':
72
+ return RetiReaderParamsFactory.create.getPools(params);
73
+ case 'getNodePoolAssignments':
74
+ case 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])':
75
+ return RetiReaderParamsFactory.create.getNodePoolAssignments(params);
76
+ case 'getAllPoolInfo':
77
+ case 'getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))':
78
+ return RetiReaderParamsFactory.create.getAllPoolInfo(params);
79
+ case 'getBlockTimestamps':
80
+ case 'getBlockTimestamps(uint64)uint64':
81
+ return RetiReaderParamsFactory.create.getBlockTimestamps(params);
82
+ case 'getAlgodVersion':
83
+ case 'getAlgodVersion(uint64[])string':
84
+ return RetiReaderParamsFactory.create.getAlgodVersion(params);
85
+ }
86
+ throw new Error(`Unknown ' + verb + ' method`);
87
+ },
88
+ /**
89
+ * Constructs create ABI call params for the RetiReader smart contract using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method
90
+ *
91
+ * @param params Parameters for the call
92
+ * @returns An `AppClientMethodCallParams` object for the call
93
+ */
94
+ getValidatorConfig(params) {
95
+ return {
96
+ ...params,
97
+ method: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
98
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
99
+ };
100
+ },
101
+ /**
102
+ * Constructs create ABI call params for the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method
103
+ *
104
+ * @param params Parameters for the call
105
+ * @returns An `AppClientMethodCallParams` object for the call
106
+ */
107
+ getValidatorStates(params) {
108
+ return {
109
+ ...params,
110
+ method: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
111
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
112
+ };
113
+ },
114
+ /**
115
+ * Constructs create ABI call params for the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method
116
+ *
117
+ * @param params Parameters for the call
118
+ * @returns An `AppClientMethodCallParams` object for the call
119
+ */
120
+ getPools(params) {
121
+ return {
122
+ ...params,
123
+ method: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
124
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
125
+ };
126
+ },
127
+ /**
128
+ * Constructs create ABI call params for the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method
129
+ *
130
+ * @param params Parameters for the call
131
+ * @returns An `AppClientMethodCallParams` object for the call
132
+ */
133
+ getNodePoolAssignments(params) {
134
+ return {
135
+ ...params,
136
+ method: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
137
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
138
+ };
139
+ },
140
+ /**
141
+ * Constructs create ABI call params for the RetiReader smart contract using the getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method
142
+ *
143
+ * @param params Parameters for the call
144
+ * @returns An `AppClientMethodCallParams` object for the call
145
+ */
146
+ getAllPoolInfo(params) {
147
+ return {
148
+ ...params,
149
+ method: 'getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))',
150
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
151
+ };
152
+ },
153
+ /**
154
+ * Constructs create ABI call params for the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method
155
+ *
156
+ * @param params Parameters for the call
157
+ * @returns An `AppClientMethodCallParams` object for the call
158
+ */
159
+ getBlockTimestamps(params) {
160
+ return {
161
+ ...params,
162
+ method: 'getBlockTimestamps(uint64)uint64',
163
+ args: Array.isArray(params.args) ? params.args : [params.args.num],
164
+ };
165
+ },
166
+ /**
167
+ * Constructs create ABI call params for the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method
168
+ *
169
+ * @param params Parameters for the call
170
+ * @returns An `AppClientMethodCallParams` object for the call
171
+ */
172
+ getAlgodVersion(params) {
173
+ return {
174
+ ...params,
175
+ method: 'getAlgodVersion(uint64[])string',
176
+ args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
177
+ };
178
+ },
179
+ };
180
+ }
181
+ /**
182
+ * Constructs a no op call for the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method
183
+ *
184
+ * @param params Parameters for the call
185
+ * @returns An `AppClientMethodCallParams` object for the call
186
+ */
187
+ static getValidatorConfig(params) {
188
+ return {
189
+ ...params,
190
+ method: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
191
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
192
+ };
193
+ }
194
+ /**
195
+ * Constructs a no op call for the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method
196
+ *
197
+ * @param params Parameters for the call
198
+ * @returns An `AppClientMethodCallParams` object for the call
199
+ */
200
+ static getValidatorStates(params) {
201
+ return {
202
+ ...params,
203
+ method: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
204
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
205
+ };
206
+ }
207
+ /**
208
+ * Constructs a no op call for the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method
209
+ *
210
+ * @param params Parameters for the call
211
+ * @returns An `AppClientMethodCallParams` object for the call
212
+ */
213
+ static getPools(params) {
214
+ return {
215
+ ...params,
216
+ method: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
217
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
218
+ };
219
+ }
220
+ /**
221
+ * Constructs a no op call for the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method
222
+ *
223
+ * @param params Parameters for the call
224
+ * @returns An `AppClientMethodCallParams` object for the call
225
+ */
226
+ static getNodePoolAssignments(params) {
227
+ return {
228
+ ...params,
229
+ method: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
230
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
231
+ };
232
+ }
233
+ /**
234
+ * Constructs a no op call for the getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method
235
+ *
236
+ * @param params Parameters for the call
237
+ * @returns An `AppClientMethodCallParams` object for the call
238
+ */
239
+ static getAllPoolInfo(params) {
240
+ return {
241
+ ...params,
242
+ method: 'getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))',
243
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
244
+ };
245
+ }
246
+ /**
247
+ * Constructs a no op call for the getBlockTimestamps(uint64)uint64 ABI method
248
+ *
249
+ * @param params Parameters for the call
250
+ * @returns An `AppClientMethodCallParams` object for the call
251
+ */
252
+ static getBlockTimestamps(params) {
253
+ return {
254
+ ...params,
255
+ method: 'getBlockTimestamps(uint64)uint64',
256
+ args: Array.isArray(params.args) ? params.args : [params.args.num],
257
+ };
258
+ }
259
+ /**
260
+ * Constructs a no op call for the getAlgodVersion(uint64[])string ABI method
261
+ *
262
+ * @param params Parameters for the call
263
+ * @returns An `AppClientMethodCallParams` object for the call
264
+ */
265
+ static getAlgodVersion(params) {
266
+ return {
267
+ ...params,
268
+ method: 'getAlgodVersion(uint64[])string',
269
+ args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
270
+ };
271
+ }
272
+ }
273
+ /**
274
+ * A factory to create and deploy one or more instance of the RetiReader smart contract and to create one or more app clients to interact with those (or other) app instances
275
+ */
276
+ class RetiReaderFactory {
277
+ /**
278
+ * The underlying `AppFactory` for when you want to have more flexibility
279
+ */
280
+ appFactory;
281
+ /**
282
+ * Creates a new instance of `RetiReaderFactory`
283
+ *
284
+ * @param params The parameters to initialise the app factory with
285
+ */
286
+ constructor(params) {
287
+ this.appFactory = new _AppFactory({
288
+ ...params,
289
+ appSpec: APP_SPEC,
290
+ });
291
+ }
292
+ /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
293
+ get appName() {
294
+ return this.appFactory.appName;
295
+ }
296
+ /** The ARC-56 app spec being used */
297
+ get appSpec() {
298
+ return APP_SPEC;
299
+ }
300
+ /** A reference to the underlying `AlgorandClient` this app factory is using. */
301
+ get algorand() {
302
+ return this.appFactory.algorand;
303
+ }
304
+ /**
305
+ * Returns a new `AppClient` client for an app instance of the given ID.
306
+ *
307
+ * Automatically populates appName, defaultSender and source maps from the factory
308
+ * if not specified in the params.
309
+ * @param params The parameters to create the app client
310
+ * @returns The `AppClient`
311
+ */
312
+ getAppClientById(params) {
313
+ return new RetiReaderClient(this.appFactory.getAppClientById(params));
314
+ }
315
+ /**
316
+ * Returns a new `AppClient` client, resolving the app by creator address and name
317
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
318
+ *
319
+ * Automatically populates appName, defaultSender and source maps from the factory
320
+ * if not specified in the params.
321
+ * @param params The parameters to create the app client
322
+ * @returns The `AppClient`
323
+ */
324
+ async getAppClientByCreatorAndName(params) {
325
+ return new RetiReaderClient(await this.appFactory.getAppClientByCreatorAndName(params));
326
+ }
327
+ /**
328
+ * Idempotently deploys the RetiReader smart contract.
329
+ *
330
+ * @param params The arguments for the contract calls and any additional parameters for the call
331
+ * @returns The deployment result
332
+ */
333
+ async deploy(params = {}) {
334
+ const result = await this.appFactory.deploy({
335
+ ...params,
336
+ createParams: params.createParams?.method ? RetiReaderParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams : undefined,
337
+ });
338
+ return { result: result.result, appClient: new RetiReaderClient(result.appClient) };
339
+ }
340
+ /**
341
+ * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
342
+ */
343
+ params = {
344
+ /**
345
+ * Gets available create methods
346
+ */
347
+ create: {
348
+ /**
349
+ * Creates a new instance of the RetiReader smart contract using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method.
350
+ *
351
+ * @param params The params for the smart contract call
352
+ * @returns The create params
353
+ */
354
+ getValidatorConfig: (params) => {
355
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
356
+ },
357
+ /**
358
+ * Creates a new instance of the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
359
+ *
360
+ * @param params The params for the smart contract call
361
+ * @returns The create params
362
+ */
363
+ getValidatorStates: (params) => {
364
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidatorStates(params));
365
+ },
366
+ /**
367
+ * Creates a new instance of the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
368
+ *
369
+ * @param params The params for the smart contract call
370
+ * @returns The create params
371
+ */
372
+ getPools: (params) => {
373
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getPools(params));
374
+ },
375
+ /**
376
+ * Creates a new instance of the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
377
+ *
378
+ * @param params The params for the smart contract call
379
+ * @returns The create params
380
+ */
381
+ getNodePoolAssignments: (params) => {
382
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
383
+ },
384
+ /**
385
+ * Creates a new instance of the RetiReader smart contract using the getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method.
386
+ *
387
+ * @param params The params for the smart contract call
388
+ * @returns The create params
389
+ */
390
+ getAllPoolInfo: (params) => {
391
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getAllPoolInfo(params));
392
+ },
393
+ /**
394
+ * Creates a new instance of the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method.
395
+ *
396
+ * @param params The params for the smart contract call
397
+ * @returns The create params
398
+ */
399
+ getBlockTimestamps: (params) => {
400
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
401
+ },
402
+ /**
403
+ * Creates a new instance of the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method.
404
+ *
405
+ * @param params The params for the smart contract call
406
+ * @returns The create params
407
+ */
408
+ getAlgodVersion: (params) => {
409
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
410
+ },
411
+ },
412
+ /**
413
+ * Gets available deployUpdate methods
414
+ */
415
+ deployUpdate: {
416
+ /**
417
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
418
+ *
419
+ * @param params The params for the bare (raw) call
420
+ * @returns The params for a deployUpdate call
421
+ */
422
+ bare: (params) => {
423
+ return this.appFactory.params.bare.deployUpdate(params);
424
+ },
425
+ },
426
+ /**
427
+ * Gets available deployDelete methods
428
+ */
429
+ deployDelete: {
430
+ /**
431
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
432
+ *
433
+ * @param params The params for the bare (raw) call
434
+ * @returns The params for a deployDelete call
435
+ */
436
+ bare: (params) => {
437
+ return this.appFactory.params.bare.deployDelete(params);
438
+ },
439
+ },
440
+ };
441
+ /**
442
+ * Create transactions for the current app
443
+ */
444
+ createTransaction = {
445
+ /**
446
+ * Gets available create methods
447
+ */
448
+ create: {
449
+ /**
450
+ * Creates a new instance of the RetiReader smart contract using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method.
451
+ *
452
+ * @param params The params for the smart contract call
453
+ * @returns The create transaction
454
+ */
455
+ getValidatorConfig: (params) => {
456
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
457
+ },
458
+ /**
459
+ * Creates a new instance of the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
460
+ *
461
+ * @param params The params for the smart contract call
462
+ * @returns The create transaction
463
+ */
464
+ getValidatorStates: (params) => {
465
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidatorStates(params));
466
+ },
467
+ /**
468
+ * Creates a new instance of the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
469
+ *
470
+ * @param params The params for the smart contract call
471
+ * @returns The create transaction
472
+ */
473
+ getPools: (params) => {
474
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getPools(params));
475
+ },
476
+ /**
477
+ * Creates a new instance of the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
478
+ *
479
+ * @param params The params for the smart contract call
480
+ * @returns The create transaction
481
+ */
482
+ getNodePoolAssignments: (params) => {
483
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
484
+ },
485
+ /**
486
+ * Creates a new instance of the RetiReader smart contract using the getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method.
487
+ *
488
+ * @param params The params for the smart contract call
489
+ * @returns The create transaction
490
+ */
491
+ getAllPoolInfo: (params) => {
492
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getAllPoolInfo(params));
493
+ },
494
+ /**
495
+ * Creates a new instance of the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method.
496
+ *
497
+ * @param params The params for the smart contract call
498
+ * @returns The create transaction
499
+ */
500
+ getBlockTimestamps: (params) => {
501
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
502
+ },
503
+ /**
504
+ * Creates a new instance of the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method.
505
+ *
506
+ * @param params The params for the smart contract call
507
+ * @returns The create transaction
508
+ */
509
+ getAlgodVersion: (params) => {
510
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
511
+ },
512
+ },
513
+ };
514
+ /**
515
+ * Send calls to the current app
516
+ */
517
+ send = {
518
+ /**
519
+ * Gets available create methods
520
+ */
521
+ create: {
522
+ /**
523
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method.
524
+ *
525
+ * @param params The params for the smart contract call
526
+ * @returns The create result
527
+ */
528
+ getValidatorConfig: async (params) => {
529
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
530
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
531
+ },
532
+ /**
533
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
534
+ *
535
+ * @param params The params for the smart contract call
536
+ * @returns The create result
537
+ */
538
+ getValidatorStates: async (params) => {
539
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidatorStates(params));
540
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
541
+ },
542
+ /**
543
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
544
+ *
545
+ * @param params The params for the smart contract call
546
+ * @returns The create result
547
+ */
548
+ getPools: async (params) => {
549
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getPools(params));
550
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
551
+ },
552
+ /**
553
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
554
+ *
555
+ * @param params The params for the smart contract call
556
+ * @returns The create result
557
+ */
558
+ getNodePoolAssignments: async (params) => {
559
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
560
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
561
+ },
562
+ /**
563
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method.
564
+ *
565
+ * @param params The params for the smart contract call
566
+ * @returns The create result
567
+ */
568
+ getAllPoolInfo: async (params) => {
569
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getAllPoolInfo(params));
570
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
571
+ },
572
+ /**
573
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getBlockTimestamps(uint64)uint64 ABI method.
574
+ *
575
+ * @param params The params for the smart contract call
576
+ * @returns The create result
577
+ */
578
+ getBlockTimestamps: async (params) => {
579
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
580
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
581
+ },
582
+ /**
583
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getAlgodVersion(uint64[])string ABI method.
584
+ *
585
+ * @param params The params for the smart contract call
586
+ * @returns The create result
587
+ */
588
+ getAlgodVersion: async (params) => {
589
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
590
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
591
+ },
592
+ },
593
+ };
594
+ }
595
+ /**
596
+ * A client to make calls to the RetiReader smart contract
597
+ */
598
+ class RetiReaderClient {
599
+ /**
600
+ * The underlying `AppClient` for when you want to have more flexibility
601
+ */
602
+ appClient;
603
+ constructor(appClientOrParams) {
604
+ this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({
605
+ ...appClientOrParams,
606
+ appSpec: APP_SPEC,
607
+ });
608
+ }
609
+ /**
610
+ * Checks for decode errors on the given return value and maps the return value to the return type for the given method
611
+ * @returns The typed return value or undefined if there was no value
612
+ */
613
+ decodeReturnValue(method, returnValue) {
614
+ return returnValue !== undefined ? getArc56ReturnValue(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined;
615
+ }
616
+ /**
617
+ * Returns a new `RetiReaderClient` client, resolving the app by creator address and name
618
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
619
+ * @param params The parameters to create the app client
620
+ */
621
+ static async fromCreatorAndName(params) {
622
+ return new RetiReaderClient(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));
623
+ }
624
+ /**
625
+ * Returns an `RetiReaderClient` instance for the current network based on
626
+ * pre-determined network-specific app IDs specified in the ARC-56 app spec.
627
+ *
628
+ * If no IDs are in the app spec or the network isn't recognised, an error is thrown.
629
+ * @param params The parameters to create the app client
630
+ */
631
+ static async fromNetwork(params) {
632
+ return new RetiReaderClient(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));
633
+ }
634
+ /** The ID of the app instance this client is linked to. */
635
+ get appId() {
636
+ return this.appClient.appId;
637
+ }
638
+ /** The app address of the app instance this client is linked to. */
639
+ get appAddress() {
640
+ return this.appClient.appAddress;
641
+ }
642
+ /** The name of the app. */
643
+ get appName() {
644
+ return this.appClient.appName;
645
+ }
646
+ /** The ARC-56 app spec being used */
647
+ get appSpec() {
648
+ return this.appClient.appSpec;
649
+ }
650
+ /** A reference to the underlying `AlgorandClient` this app client is using. */
651
+ get algorand() {
652
+ return this.appClient.algorand;
653
+ }
654
+ /**
655
+ * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
656
+ */
657
+ params = {
658
+ /**
659
+ * Gets available update methods
660
+ */
661
+ update: {
662
+ /**
663
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
664
+ *
665
+ * @param params The params for the bare (raw) call
666
+ * @returns The update result
667
+ */
668
+ bare: (params) => {
669
+ return this.appClient.params.bare.update(params);
670
+ },
671
+ },
672
+ /**
673
+ * Gets available delete methods
674
+ */
675
+ delete: {
676
+ /**
677
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
678
+ *
679
+ * @param params The params for the bare (raw) call
680
+ * @returns The delete result
681
+ */
682
+ bare: (params) => {
683
+ return this.appClient.params.bare.delete(params);
684
+ },
685
+ },
686
+ /**
687
+ * Makes a clear_state call to an existing instance of the RetiReader smart contract.
688
+ *
689
+ * @param params The params for the bare (raw) call
690
+ * @returns The clearState result
691
+ */
692
+ clearState: (params) => {
693
+ return this.appClient.params.bare.clearState(params);
694
+ },
695
+ /**
696
+ * Makes a call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
697
+ *
698
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
699
+ *
700
+ * @param params The params for the smart contract call
701
+ * @returns The call params
702
+ */
703
+ getValidatorConfig: (params) => {
704
+ return this.appClient.params.call(RetiReaderParamsFactory.getValidatorConfig(params));
705
+ },
706
+ /**
707
+ * Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
708
+ *
709
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
710
+ *
711
+ * @param params The params for the smart contract call
712
+ * @returns The call params
713
+ */
714
+ getValidatorStates: (params) => {
715
+ return this.appClient.params.call(RetiReaderParamsFactory.getValidatorStates(params));
716
+ },
717
+ /**
718
+ * Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
719
+ *
720
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
721
+ *
722
+ * @param params The params for the smart contract call
723
+ * @returns The call params
724
+ */
725
+ getPools: (params) => {
726
+ return this.appClient.params.call(RetiReaderParamsFactory.getPools(params));
727
+ },
728
+ /**
729
+ * Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
730
+ *
731
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
732
+ *
733
+ * @param params The params for the smart contract call
734
+ * @returns The call params
735
+ */
736
+ getNodePoolAssignments: (params) => {
737
+ return this.appClient.params.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
738
+ },
739
+ /**
740
+ * Makes a call to the RetiReader smart contract using the `getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
741
+ *
742
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
743
+ *
744
+ * @param params The params for the smart contract call
745
+ * @returns The call params
746
+ */
747
+ getAllPoolInfo: (params) => {
748
+ return this.appClient.params.call(RetiReaderParamsFactory.getAllPoolInfo(params));
749
+ },
750
+ /**
751
+ * Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
752
+ *
753
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
754
+ *
755
+ * @param params The params for the smart contract call
756
+ * @returns The call params
757
+ */
758
+ getBlockTimestamps: (params) => {
759
+ return this.appClient.params.call(RetiReaderParamsFactory.getBlockTimestamps(params));
760
+ },
761
+ /**
762
+ * Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
763
+ *
764
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
765
+ *
766
+ * @param params The params for the smart contract call
767
+ * @returns The call params
768
+ */
769
+ getAlgodVersion: (params) => {
770
+ return this.appClient.params.call(RetiReaderParamsFactory.getAlgodVersion(params));
771
+ },
772
+ };
773
+ /**
774
+ * Create transactions for the current app
775
+ */
776
+ createTransaction = {
777
+ /**
778
+ * Gets available update methods
779
+ */
780
+ update: {
781
+ /**
782
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
783
+ *
784
+ * @param params The params for the bare (raw) call
785
+ * @returns The update result
786
+ */
787
+ bare: (params) => {
788
+ return this.appClient.createTransaction.bare.update(params);
789
+ },
790
+ },
791
+ /**
792
+ * Gets available delete methods
793
+ */
794
+ delete: {
795
+ /**
796
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
797
+ *
798
+ * @param params The params for the bare (raw) call
799
+ * @returns The delete result
800
+ */
801
+ bare: (params) => {
802
+ return this.appClient.createTransaction.bare.delete(params);
803
+ },
804
+ },
805
+ /**
806
+ * Makes a clear_state call to an existing instance of the RetiReader smart contract.
807
+ *
808
+ * @param params The params for the bare (raw) call
809
+ * @returns The clearState result
810
+ */
811
+ clearState: (params) => {
812
+ return this.appClient.createTransaction.bare.clearState(params);
813
+ },
814
+ /**
815
+ * Makes a call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
816
+ *
817
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
818
+ *
819
+ * @param params The params for the smart contract call
820
+ * @returns The call transaction
821
+ */
822
+ getValidatorConfig: (params) => {
823
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidatorConfig(params));
824
+ },
825
+ /**
826
+ * Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
827
+ *
828
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
829
+ *
830
+ * @param params The params for the smart contract call
831
+ * @returns The call transaction
832
+ */
833
+ getValidatorStates: (params) => {
834
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidatorStates(params));
835
+ },
836
+ /**
837
+ * Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
838
+ *
839
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
840
+ *
841
+ * @param params The params for the smart contract call
842
+ * @returns The call transaction
843
+ */
844
+ getPools: (params) => {
845
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getPools(params));
846
+ },
847
+ /**
848
+ * Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
849
+ *
850
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
851
+ *
852
+ * @param params The params for the smart contract call
853
+ * @returns The call transaction
854
+ */
855
+ getNodePoolAssignments: (params) => {
856
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
857
+ },
858
+ /**
859
+ * Makes a call to the RetiReader smart contract using the `getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
860
+ *
861
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
862
+ *
863
+ * @param params The params for the smart contract call
864
+ * @returns The call transaction
865
+ */
866
+ getAllPoolInfo: (params) => {
867
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getAllPoolInfo(params));
868
+ },
869
+ /**
870
+ * Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
871
+ *
872
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
873
+ *
874
+ * @param params The params for the smart contract call
875
+ * @returns The call transaction
876
+ */
877
+ getBlockTimestamps: (params) => {
878
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getBlockTimestamps(params));
879
+ },
880
+ /**
881
+ * Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
882
+ *
883
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
884
+ *
885
+ * @param params The params for the smart contract call
886
+ * @returns The call transaction
887
+ */
888
+ getAlgodVersion: (params) => {
889
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getAlgodVersion(params));
890
+ },
891
+ };
892
+ /**
893
+ * Send calls to the current app
894
+ */
895
+ send = {
896
+ /**
897
+ * Gets available update methods
898
+ */
899
+ update: {
900
+ /**
901
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
902
+ *
903
+ * @param params The params for the bare (raw) call
904
+ * @returns The update result
905
+ */
906
+ bare: (params) => {
907
+ return this.appClient.send.bare.update(params);
908
+ },
909
+ },
910
+ /**
911
+ * Gets available delete methods
912
+ */
913
+ delete: {
914
+ /**
915
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
916
+ *
917
+ * @param params The params for the bare (raw) call
918
+ * @returns The delete result
919
+ */
920
+ bare: (params) => {
921
+ return this.appClient.send.bare.delete(params);
922
+ },
923
+ },
924
+ /**
925
+ * Makes a clear_state call to an existing instance of the RetiReader smart contract.
926
+ *
927
+ * @param params The params for the bare (raw) call
928
+ * @returns The clearState result
929
+ */
930
+ clearState: (params) => {
931
+ return this.appClient.send.bare.clearState(params);
932
+ },
933
+ /**
934
+ * Makes a call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
935
+ *
936
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
937
+ *
938
+ * @param params The params for the smart contract call
939
+ * @returns The call result
940
+ */
941
+ getValidatorConfig: async (params) => {
942
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorConfig(params));
943
+ return { ...result, return: result.return };
944
+ },
945
+ /**
946
+ * Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
947
+ *
948
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
949
+ *
950
+ * @param params The params for the smart contract call
951
+ * @returns The call result
952
+ */
953
+ getValidatorStates: async (params) => {
954
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorStates(params));
955
+ return { ...result, return: result.return };
956
+ },
957
+ /**
958
+ * Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
959
+ *
960
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
961
+ *
962
+ * @param params The params for the smart contract call
963
+ * @returns The call result
964
+ */
965
+ getPools: async (params) => {
966
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getPools(params));
967
+ return { ...result, return: result.return };
968
+ },
969
+ /**
970
+ * Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
971
+ *
972
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
973
+ *
974
+ * @param params The params for the smart contract call
975
+ * @returns The call result
976
+ */
977
+ getNodePoolAssignments: async (params) => {
978
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
979
+ return { ...result, return: result.return };
980
+ },
981
+ /**
982
+ * Makes a call to the RetiReader smart contract using the `getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
983
+ *
984
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
985
+ *
986
+ * @param params The params for the smart contract call
987
+ * @returns The call result
988
+ */
989
+ getAllPoolInfo: async (params) => {
990
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAllPoolInfo(params));
991
+ return { ...result, return: result.return };
992
+ },
993
+ /**
994
+ * Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
995
+ *
996
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
997
+ *
998
+ * @param params The params for the smart contract call
999
+ * @returns The call result
1000
+ */
1001
+ getBlockTimestamps: async (params) => {
1002
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getBlockTimestamps(params));
1003
+ return { ...result, return: result.return };
1004
+ },
1005
+ /**
1006
+ * Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
1007
+ *
1008
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1009
+ *
1010
+ * @param params The params for the smart contract call
1011
+ * @returns The call result
1012
+ */
1013
+ getAlgodVersion: async (params) => {
1014
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAlgodVersion(params));
1015
+ return { ...result, return: result.return };
1016
+ },
1017
+ };
1018
+ /**
1019
+ * Clone this app client with different params
1020
+ *
1021
+ * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.
1022
+ * @returns A new app client with the altered params
1023
+ */
1024
+ clone(params) {
1025
+ return new RetiReaderClient(this.appClient.clone(params));
1026
+ }
1027
+ /**
1028
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
1029
+ *
1030
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1031
+ *
1032
+ * @param params The params for the smart contract call
1033
+ * @returns The call result
1034
+ */
1035
+ async getValidatorConfig(params) {
1036
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorConfig(params));
1037
+ return result.return;
1038
+ }
1039
+ /**
1040
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
1041
+ *
1042
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1043
+ *
1044
+ * @param params The params for the smart contract call
1045
+ * @returns The call result
1046
+ */
1047
+ async getValidatorStates(params) {
1048
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorStates(params));
1049
+ return result.return;
1050
+ }
1051
+ /**
1052
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
1053
+ *
1054
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1055
+ *
1056
+ * @param params The params for the smart contract call
1057
+ * @returns The call result
1058
+ */
1059
+ async getPools(params) {
1060
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getPools(params));
1061
+ return result.return;
1062
+ }
1063
+ /**
1064
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
1065
+ *
1066
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1067
+ *
1068
+ * @param params The params for the smart contract call
1069
+ * @returns The call result
1070
+ */
1071
+ async getNodePoolAssignments(params) {
1072
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
1073
+ return result.return;
1074
+ }
1075
+ /**
1076
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
1077
+ *
1078
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1079
+ *
1080
+ * @param params The params for the smart contract call
1081
+ * @returns The call result
1082
+ */
1083
+ async getAllPoolInfo(params) {
1084
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAllPoolInfo(params));
1085
+ return result.return;
1086
+ }
1087
+ /**
1088
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
1089
+ *
1090
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1091
+ *
1092
+ * @param params The params for the smart contract call
1093
+ * @returns The call result
1094
+ */
1095
+ async getBlockTimestamps(params) {
1096
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getBlockTimestamps(params));
1097
+ return result.return;
1098
+ }
1099
+ /**
1100
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
1101
+ *
1102
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1103
+ *
1104
+ * @param params The params for the smart contract call
1105
+ * @returns The call result
1106
+ */
1107
+ async getAlgodVersion(params) {
1108
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAlgodVersion(params));
1109
+ return result.return;
1110
+ }
1111
+ /**
1112
+ * Methods to access state for the current RetiReader app
1113
+ */
1114
+ state = {};
1115
+ newGroup() {
1116
+ const client = this;
1117
+ const composer = this.algorand.newGroup();
1118
+ let promiseChain = Promise.resolve();
1119
+ const resultMappers = [];
1120
+ return {
1121
+ /**
1122
+ * Add a getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) method call against the RetiReader contract
1123
+ */
1124
+ getValidatorConfig(params) {
1125
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidatorConfig(params)));
1126
+ resultMappers.push((v) => client.decodeReturnValue('getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)', v));
1127
+ return this;
1128
+ },
1129
+ /**
1130
+ * Add a getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) method call against the RetiReader contract
1131
+ */
1132
+ getValidatorStates(params) {
1133
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidatorStates(params)));
1134
+ resultMappers.push((v) => client.decodeReturnValue('getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)', v));
1135
+ return this;
1136
+ },
1137
+ /**
1138
+ * Add a getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) method call against the RetiReader contract
1139
+ */
1140
+ getPools(params) {
1141
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getPools(params)));
1142
+ resultMappers.push((v) => client.decodeReturnValue('getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))', v));
1143
+ return this;
1144
+ },
1145
+ /**
1146
+ * Add a getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) method call against the RetiReader contract
1147
+ */
1148
+ getNodePoolAssignments(params) {
1149
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getNodePoolAssignments(params)));
1150
+ resultMappers.push((v) => client.decodeReturnValue('getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])', v));
1151
+ return this;
1152
+ },
1153
+ /**
1154
+ * Add a getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) method call against the RetiReader contract
1155
+ */
1156
+ getAllPoolInfo(params) {
1157
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAllPoolInfo(params)));
1158
+ resultMappers.push((v) => client.decodeReturnValue('getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))', v));
1159
+ return this;
1160
+ },
1161
+ /**
1162
+ * Add a getBlockTimestamps(uint64)uint64 method call against the RetiReader contract
1163
+ */
1164
+ getBlockTimestamps(params) {
1165
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBlockTimestamps(params)));
1166
+ resultMappers.push((v) => client.decodeReturnValue('getBlockTimestamps(uint64)uint64', v));
1167
+ return this;
1168
+ },
1169
+ /**
1170
+ * Add a getAlgodVersion(uint64[])string method call against the RetiReader contract
1171
+ */
1172
+ getAlgodVersion(params) {
1173
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAlgodVersion(params)));
1174
+ resultMappers.push((v) => client.decodeReturnValue('getAlgodVersion(uint64[])string', v));
1175
+ return this;
1176
+ },
1177
+ get update() {
1178
+ return {
1179
+ bare: (params) => {
1180
+ promiseChain = promiseChain.then(async () => composer.addAppUpdate(await client.params.update.bare(params)));
1181
+ return this;
1182
+ },
1183
+ };
1184
+ },
1185
+ get delete() {
1186
+ return {
1187
+ bare: (params) => {
1188
+ promiseChain = promiseChain.then(() => composer.addAppDelete(client.params.delete.bare(params)));
1189
+ return this;
1190
+ },
1191
+ };
1192
+ },
1193
+ /**
1194
+ * Add a clear state call to the RetiReader contract
1195
+ */
1196
+ clearState(params) {
1197
+ promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));
1198
+ return this;
1199
+ },
1200
+ addTransaction(txn, signer) {
1201
+ promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));
1202
+ return this;
1203
+ },
1204
+ async composer() {
1205
+ await promiseChain;
1206
+ return composer;
1207
+ },
1208
+ async simulate(options) {
1209
+ await promiseChain;
1210
+ const result = await (!options ? composer.simulate() : composer.simulate(options));
1211
+ return {
1212
+ ...result,
1213
+ returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i](val) : val.returnValue)
1214
+ };
1215
+ },
1216
+ async send(params) {
1217
+ await promiseChain;
1218
+ const result = await composer.send(params);
1219
+ return {
1220
+ ...result,
1221
+ returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i](val) : val.returnValue)
1222
+ };
1223
+ }
1224
+ };
1225
+ }
1226
+ }
1227
+ /* BEGIN GHOST SDK CODE */
1228
+ import { getABIDecodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56';
1229
+ import { makeEmptyTransactionSigner } from 'algosdk';
1230
+ const emptySigner = makeEmptyTransactionSigner();
1231
+ class GhostBase {
1232
+ static factory = RetiReaderFactory;
1233
+ static client = RetiReaderClient;
1234
+ algorand;
1235
+ readerAccount = 'A7NMWS3NT3IUDMLVO26ULGXGIIOUQ3ND2TXSER6EBGRZNOBOUIQXHIBGDE'; // non-mainnet fee sink
1236
+ ghostAppId;
1237
+ factory;
1238
+ client;
1239
+ cacheParamsTimeout = 75; // ms
1240
+ constructor({ algorand, readerAccount, ghostAppId, }) {
1241
+ this.algorand = algorand;
1242
+ if (readerAccount)
1243
+ this.readerAccount = readerAccount;
1244
+ this.factory = this.algorand.client.getTypedAppFactory(RetiReaderFactory, {
1245
+ defaultSender: this.readerAccount,
1246
+ });
1247
+ this.ghostAppId = ghostAppId;
1248
+ this.client = this.factory.getAppClientById({ appId: ghostAppId ?? 13n });
1249
+ }
1250
+ async getAndCacheSuggestedParams() {
1251
+ const suggestedParams = await this.algorand.getSuggestedParams();
1252
+ if (this.cacheParamsTimeout) {
1253
+ this.algorand.setSuggestedParamsCache(suggestedParams, new Date(Date.now() + this.cacheParamsTimeout));
1254
+ }
1255
+ return suggestedParams;
1256
+ }
1257
+ async execute({ signature, txnBuilder, methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1258
+ await this.getAndCacheSuggestedParams();
1259
+ const methodName = signature.slice(0, signature.indexOf('('));
1260
+ let builder = this.client.newGroup();
1261
+ if (this.ghostAppId) {
1262
+ // deployed variant, we can call directly
1263
+ const argsArray = Array.isArray(methodArgsOrArgsArray) ? methodArgsOrArgsArray : [methodArgsOrArgsArray];
1264
+ for (let i = 0; i < argsArray.length; i++) {
1265
+ const args = argsArray[i];
1266
+ const extra = Array.isArray(extraMethodCallArgs) ? extraMethodCallArgs[i] : extraMethodCallArgs;
1267
+ builder = txnBuilder(builder, { args, signer: emptySigner, ...extra });
1268
+ }
1269
+ }
1270
+ else {
1271
+ // ghost variant
1272
+ // Avoiding .createTransaction because it compiles on the fly (why?). build app args and convert to app create
1273
+ let throwawayBuilder = this.client.newGroup();
1274
+ const argsArray = Array.isArray(methodArgsOrArgsArray) ? methodArgsOrArgsArray : [methodArgsOrArgsArray];
1275
+ for (let i = 0; i < argsArray.length; i++) {
1276
+ const args = argsArray[i];
1277
+ const extra = Array.isArray(extraMethodCallArgs) ? extraMethodCallArgs[i] : extraMethodCallArgs;
1278
+ throwawayBuilder = txnBuilder(throwawayBuilder, { args, signer: emptySigner, ...extra });
1279
+ }
1280
+ const { transactions } = await (await throwawayBuilder.composer()).buildTransactions();
1281
+ // convert to app creates, copy to new real builder
1282
+ for (const txn of transactions) {
1283
+ // @ts-ignore
1284
+ txn.applicationCall = {
1285
+ ...txn.applicationCall,
1286
+ appIndex: 0,
1287
+ approvalProgram: Buffer.from(APP_SPEC.byteCode.approval, 'base64'),
1288
+ clearProgram: Buffer.from(APP_SPEC.byteCode.clear, 'base64'),
1289
+ numGlobalByteSlices: APP_SPEC.state.schema.global.bytes,
1290
+ numGlobalInts: APP_SPEC.state.schema.global.ints,
1291
+ numLocalByteSlices: APP_SPEC.state.schema.local.bytes,
1292
+ numLocalInts: APP_SPEC.state.schema.local.ints,
1293
+ };
1294
+ builder = builder.addTransaction(txn, emptySigner);
1295
+ }
1296
+ }
1297
+ const { confirmations } = await builder.simulate({
1298
+ extraOpcodeBudget: 170000,
1299
+ allowMoreLogging: true,
1300
+ allowEmptySignatures: true,
1301
+ allowUnnamedResources: true,
1302
+ ...extraSimulateArgs,
1303
+ });
1304
+ const logs = confirmations.flatMap(({ logs }, i) => {
1305
+ if (!logs)
1306
+ throw new Error(`logs were not returned from simulate txn ${i}. this should never happen`);
1307
+ return logs.slice(0, -1);
1308
+ });
1309
+ const specRetObj = this.client.appSpec.methods.find(({ name }) => name === methodName)?.returns;
1310
+ if (!specRetObj)
1311
+ throw new Error('Method not found in app spec');
1312
+ const retTypeStr = specRetObj.struct ?? specRetObj.type;
1313
+ const retData = [];
1314
+ for (let i = 0; i < logs.length; i++) {
1315
+ retData.push(getABIDecodedValue(new Uint8Array(logs[i]), retTypeStr, this.factory.appSpec.structs));
1316
+ }
1317
+ return retData;
1318
+ }
1319
+ }
1320
+ export class RetiReaderSDK extends GhostBase {
1321
+ constructor(args) {
1322
+ super(args);
1323
+ }
1324
+ async getValidatorConfig({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1325
+ return this.execute({
1326
+ signature: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
1327
+ txnBuilder: (builder, args) => builder.getValidatorConfig(args),
1328
+ methodArgsOrArgsArray,
1329
+ extraMethodCallArgs,
1330
+ extraSimulateArgs,
1331
+ });
1332
+ }
1333
+ async getValidatorStates({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1334
+ return this.execute({
1335
+ signature: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
1336
+ txnBuilder: (builder, args) => builder.getValidatorStates(args),
1337
+ methodArgsOrArgsArray,
1338
+ extraMethodCallArgs,
1339
+ extraSimulateArgs,
1340
+ });
1341
+ }
1342
+ async getPools({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1343
+ return this.execute({
1344
+ signature: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
1345
+ txnBuilder: (builder, args) => builder.getPools(args),
1346
+ methodArgsOrArgsArray,
1347
+ extraMethodCallArgs,
1348
+ extraSimulateArgs,
1349
+ });
1350
+ }
1351
+ async getNodePoolAssignments({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1352
+ return this.execute({
1353
+ signature: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
1354
+ txnBuilder: (builder, args) => builder.getNodePoolAssignments(args),
1355
+ methodArgsOrArgsArray,
1356
+ extraMethodCallArgs,
1357
+ extraSimulateArgs,
1358
+ });
1359
+ }
1360
+ async getAllPoolInfo({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1361
+ return this.execute({
1362
+ signature: 'getAllPoolInfo(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))',
1363
+ txnBuilder: (builder, args) => builder.getAllPoolInfo(args),
1364
+ methodArgsOrArgsArray,
1365
+ extraMethodCallArgs,
1366
+ extraSimulateArgs,
1367
+ });
1368
+ }
1369
+ async getBlockTimestamps({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1370
+ return this.execute({
1371
+ signature: 'getBlockTimestamps(uint64)uint64',
1372
+ txnBuilder: (builder, args) => builder.getBlockTimestamps(args),
1373
+ methodArgsOrArgsArray,
1374
+ extraMethodCallArgs,
1375
+ extraSimulateArgs,
1376
+ });
1377
+ }
1378
+ async getAlgodVersion({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1379
+ return this.execute({
1380
+ signature: 'getAlgodVersion(uint64[])string',
1381
+ txnBuilder: (builder, args) => builder.getAlgodVersion(args),
1382
+ methodArgsOrArgsArray,
1383
+ extraMethodCallArgs,
1384
+ extraSimulateArgs,
1385
+ });
1386
+ }
1387
+ }
1388
+ /* END GHOST SDK CODE */