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,1773 @@
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": { "AssetInfo": [{ "name": "assetId", "type": "uint64" }, { "name": "creator", "type": "address" }, { "name": "total", "type": "uint64" }, { "name": "decimals", "type": "uint8" }, { "name": "unitName", "type": "string" }, { "name": "name", "type": "string" }], "Constraints": [{ "name": "epochPayoutRoundsMin", "type": "uint64" }, { "name": "epochPayoutRoundsMax", "type": "uint64" }, { "name": "minPctToValidatorWFourDecimals", "type": "uint64" }, { "name": "maxPctToValidatorWFourDecimals", "type": "uint64" }, { "name": "minEntryStake", "type": "uint64" }, { "name": "maxAlgoPerPool", "type": "uint64" }, { "name": "maxAlgoPerValidator", "type": "uint64" }, { "name": "amtConsideredSaturated", "type": "uint64" }, { "name": "maxNodes", "type": "uint64" }, { "name": "maxPoolsPerNode", "type": "uint64" }, { "name": "maxStakersPerPool", "type": "uint64" }], "MbrAmounts": [{ "name": "addValidatorMbr", "type": "uint64" }, { "name": "addPoolMbr", "type": "uint64" }, { "name": "poolInitMbr", "type": "uint64" }, { "name": "addStakerMbr", "type": "uint64" }], "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" }], "MbrAmountsAndProtocolConstraints": [{ "name": "mbrAmounts", "type": "MbrAmounts" }, { "name": "constraints", "type": "Constraints" }], "Validator": [{ "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": "getMbrAmountsAndProtocolConstraints", "args": [{ "type": "uint64", "name": "registryAppId" }], "returns": { "type": "((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))", "struct": "MbrAmountsAndProtocolConstraints" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "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": "getValidators", "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": "Validator" }, "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": {} }, { "name": "getAssets", "args": [{ "type": "uint64[]", "name": "assetIds" }], "returns": { "type": "(uint64,address,uint64,uint8,string,string)", "struct": "AssetInfo" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getPoolBalancesAndLastPayouts", "args": [{ "type": "uint64[]", "name": "poolAppIds" }], "returns": { "type": "(uint64,uint64)" }, "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": [193, 235, 2053, 2106, 2158, 2217], "errorMessage": "Bytes has valid prefix" }, { "pc": [53], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [142], "errorMessage": "OnCompletion must be one of UpdateApplication, DeleteApplication && can only call when not creating" }, { "pc": [1954], "errorMessage": "application exists" }, { "pc": [1814, 1819, 1833, 1838], "errorMessage": "asset exists" }, { "pc": [723], "errorMessage": "index access is out of bounds" }, { "pc": [266, 580, 651, 694, 764, 1028, 1668, 1760, 1918, 2161], "errorMessage": "invalid array length header" }, { "pc": [241], "errorMessage": "invalid number of bytes for Constraints" }, { "pc": [199], "errorMessage": "invalid number of bytes for MbrAmounts" }, { "pc": [2224], "errorMessage": "invalid number of bytes for NodePoolAssignmentConfig" }, { "pc": [2060], "errorMessage": "invalid number of bytes for ValidatorConfig" }, { "pc": [2112], "errorMessage": "invalid number of bytes for ValidatorCurState" }, { "pc": [2171], "errorMessage": "invalid number of bytes for arc4.dynamic_array<PoolInfo>" }, { "pc": [1929], "errorMessage": "invalid number of bytes for arc4.dynamic_array<application>" }, { "pc": [1771], "errorMessage": "invalid number of bytes for arc4.dynamic_array<asset>" }, { "pc": [277, 591, 662, 775, 1039, 1679], "errorMessage": "invalid number of bytes for arc4.dynamic_array<uint64>" }, { "pc": [156, 258, 572, 643, 756, 1020, 1613], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [1825], "errorMessage": "overflow" }], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEgMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gZXhwb3J0IGNsYXNzIFJldGlSZWFkZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZG1pbk9ubHlAMTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICBwdXNoYnl0ZXNzIDB4ZDdiZjg0NDUgMHg4NGM0NDI1YSAweDI0ZTAwYzgwIDB4YmI4ODI5MjcgMHhhNjJmMTEzMiAweGMyYzk4YTZiIDB4M2QzYjhiNGEgMHhiYjQ2MGJlZSAweDBjYzI5ZGQ4IDB4ZjE5NGVjNzkgLy8gbWV0aG9kICJnZXRNYnJBbW91bnRzQW5kUHJvdG9jb2xDb25zdHJhaW50cyh1aW50NjQpKCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSkiLCBtZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQsdWludDY0W10pKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJnZXRWYWxpZGF0b3JTdGF0ZXModWludDY0LHVpbnQ2NFtdKSh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJnZXRQb29scyh1aW50NjQsdWludDY0W10pKHVpbnQ2NCwodWludDY0LHVpbnQxNix1aW50NjQpKSIsIG1ldGhvZCAiZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh1aW50NjQsdWludDY0W10pKCh1aW50NjRbM10pWzhdKSIsIG1ldGhvZCAiZ2V0VmFsaWRhdG9ycyh1aW50NjQsdWludDY0W10pKCh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KSwodWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQxNix1aW50NjQpW10sKCh1aW50NjRbM10pWzhdKSkiLCBtZXRob2QgImdldEJsb2NrVGltZXN0YW1wcyh1aW50NjQpdWludDY0IiwgbWV0aG9kICJnZXRBbGdvZFZlcnNpb24odWludDY0W10pc3RyaW5nIiwgbWV0aG9kICJnZXRBc3NldHModWludDY0W10pKHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCx1aW50OCxzdHJpbmcsc3RyaW5nKSIsIG1ldGhvZCAiZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHModWludDY0W10pKHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggZ2V0TWJyQW1vdW50c0FuZFByb3RvY29sQ29uc3RyYWludHMgZ2V0VmFsaWRhdG9yQ29uZmlnIGdldFZhbGlkYXRvclN0YXRlcyBnZXRQb29scyBnZXROb2RlUG9vbEFzc2lnbm1lbnRzIGdldFZhbGlkYXRvcnMgZ2V0QmxvY2tUaW1lc3RhbXBzIGdldEFsZ29kVmVyc2lvbiBnZXRBc3NldHMgZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHMKICAgIGVycgoKbWFpbl9hZG1pbk9ubHlAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsiVXBkYXRlQXBwbGljYXRpb24iLCAiRGVsZXRlQXBwbGljYXRpb24iXSB9KQogICAgaW50Y18yIC8vIDEKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHNobAogICAgcHVzaGludCA0OCAvLyA0OAogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIFVwZGF0ZUFwcGxpY2F0aW9uLCBEZWxldGVBcHBsaWNhdGlvbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcyk7CiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsiVXBkYXRlQXBwbGljYXRpb24iLCAiRGVsZXRlQXBwbGljYXRpb24iXSB9KQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0TWJyQW1vdW50c0FuZFByb3RvY29sQ29uc3RyYWludHNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRNYnJBbW91bnRzQW5kUHJvdG9jb2xDb25zdHJhaW50czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1OC02MAogICAgLy8gY29uc3QgbWJyQW1vdW50cyA9IHJldGkuY2FsbC5nZXRNYnJBbW91bnRzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hieXRlcyAweDhhODcxNDJkIC8vIG1ldGhvZCAiZ2V0TWJyQW1vdW50cygpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgTWJyQW1vdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6NjItNjQKICAgIC8vIGNvbnN0IGNvbnN0cmFpbnRzID0gcmV0aS5jYWxsLmdldFByb3RvY29sQ29uc3RyYWludHMoewogICAgLy8gICBhcHBJZDogcmVnaXN0cnlBcHBJZCwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgcHVzaGJ5dGVzIDB4ZDEzNjZjYzMgLy8gbWV0aG9kICJnZXRQcm90b2NvbENvbnN0cmFpbnRzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgODggLy8gODgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIENvbnN0cmFpbnRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gbG9nKGVuY29kZUFyYzQoeyBtYnJBbW91bnRzLCBjb25zdHJhaW50cyB9KSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldFZhbGlkYXRvckNvbmZpZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFZhbGlkYXRvckNvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0PgogICAgaW50Y18wIC8vIDAKCmdldFZhbGlkYXRvckNvbmZpZ19mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gZm9yIChjb25zdCB2YWxpZGF0b3JJZCBvZiB2YWxpZGF0b3JJZHMpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGdldFZhbGlkYXRvckNvbmZpZ19hZnRlcl9mb3JANQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBsb2coZW5jb2RlQXJjNCh0aGlzLmdldFJlbW90ZVZhbGlkYXRvckNvbmZpZyhyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCkpKTsKICAgIGRpZyA1CiAgICBzd2FwCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvckNvbmZpZwogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldFZhbGlkYXRvckNvbmZpZ19mb3JfaGVhZGVyQDIKCmdldFZhbGlkYXRvckNvbmZpZ19hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgYmFzZTMyKENVUFhZNUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRWYWxpZGF0b3JTdGF0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRWYWxpZGF0b3JTdGF0ZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0VmFsaWRhdG9yU3RhdGVzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gZm9yIChjb25zdCB2YWxpZGF0b3JJZCBvZiB2YWxpZGF0b3JJZHMpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGdldFZhbGlkYXRvclN0YXRlc19hZnRlcl9mb3JANQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gbG9nKGVuY29kZUFyYzQodGhpcy5nZXRSZW1vdGVWYWxpZGF0b3JTdGF0ZShyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCkpKTsKICAgIGRpZyA1CiAgICBzd2FwCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvclN0YXRlCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0VmFsaWRhdG9yU3RhdGVzX2Zvcl9oZWFkZXJAMgoKZ2V0VmFsaWRhdG9yU3RhdGVzX2FmdGVyX2ZvckA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRQb29sc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFBvb2xzOgogICAgaW50Y18wIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0UG9vbHNfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBmb3IgKGNvbnN0IHZhbGlkYXRvcklkIG9mIHZhbGlkYXRvcklkcykgewogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogZ2V0UG9vbHNfYWZ0ZXJfZm9yQDkKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE0MAogICAgLy8gY29uc3QgcG9vbEluZm9BcnIgPSB0aGlzLmdldFJlbW90ZVBvb2xJbmZvKHJlZ2lzdHJ5QXBwSWQsIHZhbGlkYXRvcklkKTsKICAgIGRpZyA0CiAgICBzd2FwCiAgICBjYWxsc3ViIGdldFJlbW90ZVBvb2xJbmZvCiAgICBkdXAKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBmb3IgKGNvbnN0IHBvb2xJbmZvIG9mIGNsb25lKHBvb2xJbmZvQXJyKSkgewogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGJ1cnkgNwogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNgoKZ2V0UG9vbHNfZm9yX2hlYWRlckA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBmb3IgKGNvbnN0IHBvb2xJbmZvIG9mIGNsb25lKHBvb2xJbmZvQXJyKSkgewogICAgZGlnIDUKICAgIGRpZyA3CiAgICA8CiAgICBieiBnZXRQb29sc19hZnRlcl9mb3JANwogICAgZGlnIDcKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDE4IC8vIDE4CiAgICAqCiAgICBwdXNoaW50IDE4IC8vIDE4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE0MgogICAgLy8gbG9nKGVuY29kZUFyYzQoeyB2YWxpZGF0b3JJZCwgcG9vbEluZm8gfSkpOwogICAgZGlnIDYKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgYnVyeSA2CiAgICBiIGdldFBvb2xzX2Zvcl9oZWFkZXJANAoKZ2V0UG9vbHNfYWZ0ZXJfZm9yQDc6CiAgICBkdXAKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0UG9vbHNfZm9yX2hlYWRlckAyCgpnZXRQb29sc19hZnRlcl9mb3JAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldE5vZGVQb29sQXNzaWdubWVudHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c19mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIGZvciAoY29uc3QgdmFsaWRhdG9ySWQgb2YgdmFsaWRhdG9ySWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXROb2RlUG9vbEFzc2lnbm1lbnRzX2FmdGVyX2ZvckA1CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBsb2coZW5jb2RlQXJjNCh0aGlzLmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHMocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpKSk7CiAgICBkaWcgNQogICAgc3dhcAogICAgY2FsbHN1YiBnZXRSZW1vdGVOb2RlUG9vbEFzc2lnbm1lbnRzCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c19mb3JfaGVhZGVyQDIKCmdldE5vZGVQb29sQXNzaWdubWVudHNfYWZ0ZXJfZm9yQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRWYWxpZGF0b3JzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0VmFsaWRhdG9yczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHVpbnQ2ND4KICAgIGludGNfMCAvLyAwCgpnZXRWYWxpZGF0b3JzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gZm9yIChjb25zdCB2YWxpZGF0b3JJZCBvZiB2YWxpZGF0b3JJZHMpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGdldFZhbGlkYXRvcnNfYWZ0ZXJfZm9yQDUKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxOTQKICAgIC8vIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0UmVtb3RlVmFsaWRhdG9yQ29uZmlnKHJlZ2lzdHJ5QXBwSWQsIHZhbGlkYXRvcklkKTsKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGRpZyAxCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvckNvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpOwogICAgZGlnIDIKICAgIGRpZyAyCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvclN0YXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxOTYKICAgIC8vIGNvbnN0IHBvb2xJbmZvID0gdGhpcy5nZXRSZW1vdGVQb29sSW5mbyhyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCk7CiAgICBkaWcgMwogICAgZGlnIDMKICAgIGNhbGxzdWIgZ2V0UmVtb3RlUG9vbEluZm8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gY29uc3Qgbm9kZUFzc2lnbm1lbnQgPSB0aGlzLmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHMocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpOwogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNhbGxzdWIgZ2V0UmVtb3RlTm9kZVBvb2xBc3NpZ25tZW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTk5LTIwNAogICAgLy8gY29uc3QgYWxsUG9vbEluZm86IFZhbGlkYXRvciA9IHsKICAgIC8vICAgY29uZmlnOiBjbG9uZShjb25maWcpLAogICAgLy8gICBzdGF0ZTogY2xvbmUoc3RhdGUpLAogICAgLy8gICBwb29sSW5mbzogY2xvbmUocG9vbEluZm8pLAogICAgLy8gICBub2RlQXNzaWdubWVudDogY2xvbmUobm9kZUFzc2lnbm1lbnQpLAogICAgLy8gfTsKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAxY2UKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gbG9nKGVuY29kZUFyYzQoYWxsUG9vbEluZm8pKTsKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRWYWxpZGF0b3JzX2Zvcl9oZWFkZXJAMgoKZ2V0VmFsaWRhdG9yc19hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgcHVzaGJ5dGVzIGJhc2UzMihDVVBYWTVJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRFRRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBKQogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0QmxvY2tUaW1lc3RhbXBzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0QmxvY2tUaW1lc3RhbXBzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIGZvciAobGV0IHJvdW5kOiB1aW50NjQgPSBUeG4ubGFzdFZhbGlkIC0gbnVtIC0gMTsgcm91bmQgPCBUeG4uZmlyc3RWYWxpZCAtIDE7IHJvdW5kKyspIHsKICAgIHR4biBMYXN0VmFsaWQKICAgIHN3YXAKICAgIC0KICAgIGludGNfMiAvLyAxCiAgICAtCgpnZXRCbG9ja1RpbWVzdGFtcHNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIGZvciAobGV0IHJvdW5kOiB1aW50NjQgPSBUeG4ubGFzdFZhbGlkIC0gbnVtIC0gMTsgcm91bmQgPCBUeG4uZmlyc3RWYWxpZCAtIDE7IHJvdW5kKyspIHsKICAgIHR4biBGaXJzdFZhbGlkCiAgICBpbnRjXzIgLy8gMQogICAgLQogICAgZGlnIDEKICAgID4KICAgIGJ6IGdldEJsb2NrVGltZXN0YW1wc19hZnRlcl93aGlsZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGxvZyhvcC5CbG9jay5ibGtUaW1lc3RhbXAocm91bmQpKTsKICAgIGR1cG4gMgogICAgYmxvY2sgQmxrVGltZXN0YW1wCiAgICBpdG9iCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gZm9yIChsZXQgcm91bmQ6IHVpbnQ2NCA9IFR4bi5sYXN0VmFsaWQgLSBudW0gLSAxOyByb3VuZCA8IFR4bi5maXJzdFZhbGlkIC0gMTsgcm91bmQrKykgewogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRCbG9ja1RpbWVzdGFtcHNfd2hpbGVfdG9wQDIKCmdldEJsb2NrVGltZXN0YW1wc19hZnRlcl93aGlsZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwMDAKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldEFsZ29kVmVyc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldEFsZ29kVmVyc2lvbjoKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMjQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0QWxnb2RWZXJzaW9uX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gZm9yIChjb25zdCBwb29sQXBwSWQgb2YgcG9vbEFwcElkcykgewogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2ZvckA4CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIyNwogICAgLy8gY29uc3QgW2FsZ29kVmVyLCBleGlzdHNdID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMocG9vbEFwcElkLCBCeXRlc2BhbGdvZFZlcmApOwogICAgcHVzaGJ5dGVzICJhbGdvZFZlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIyOAogICAgLy8gaWYgKGV4aXN0cykgewogICAgYnogZ2V0QWxnb2RWZXJzaW9uX2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIGxvZyhlbmNvZGVBcmM0KGFsZ29kVmVyKSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2lmX2Vsc2VANjoKICAgIGR1cAogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRBbGdvZFZlcnNpb25fZm9yX2hlYWRlckAyCgpnZXRBbGdvZFZlcnNpb25fZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIGxvZyhlbmNvZGVBcmM0KCIiKSk7CiAgICBwdXNoYnl0ZXMgMHgwMDAwCiAgICBsb2cKICAgIGIgZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2lmX2Vsc2VANgoKZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2ZvckA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldEFzc2V0c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldEFzc2V0czoKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhc3NldD4KICAgIGludGNfMCAvLyAwCgpnZXRBc3NldHNfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjM5CiAgICAvLyBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0SWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXRBc3NldHNfYWZ0ZXJfZm9yQDgKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDAKICAgIC8vIGNvbnN0IFtjcmVhdG9yLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRDcmVhdG9yKGFzc2V0LmlkKTsKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICBzd2FwCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI0MQogICAgLy8gaWYgKCFleGlzdHMpIHsKICAgIGJueiBnZXRBc3NldHNfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gbG9nKGVuY29kZUFyYzQodGhpcy5nZXRFbXB0eUFzc2V0SW5mbyhhc3NldC5pZCkpKTsKICAgIGNhbGxzdWIgZ2V0RW1wdHlBc3NldEluZm8KICAgIGxvZwoKZ2V0QXNzZXRzX2FmdGVyX2lmX2Vsc2VANjoKICAgIGR1cAogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRBc3NldHNfZm9yX2hlYWRlckAyCgpnZXRBc3NldHNfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIHRvdGFsOiBhc3NldC50b3RhbCwKICAgIGR1cAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDgKICAgIC8vIGRlY2ltYWxzOiBuZXcgVWludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgZGlnIDEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyB1bml0TmFtZTogYXNzZXQudW5pdE5hbWUudG9TdHJpbmcoKSwKICAgIGRpZyAyCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gbmFtZTogYXNzZXQubmFtZS50b1N0cmluZygpLAogICAgZGlnIDMKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDQtMjUxCiAgICAvLyBjb25zdCBhc3NldEluZm86IEFzc2V0SW5mbyA9IHsKICAgIC8vICAgYXNzZXRJZDogYXNzZXQuaWQsCiAgICAvLyAgIGNyZWF0b3I6IGNyZWF0b3IsCiAgICAvLyAgIHRvdGFsOiBhc3NldC50b3RhbCwKICAgIC8vICAgZGVjaW1hbHM6IG5ldyBVaW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyAgIHVuaXROYW1lOiBhc3NldC51bml0TmFtZS50b1N0cmluZygpLAogICAgLy8gICBuYW1lOiBhc3NldC5uYW1lLnRvU3RyaW5nKCksCiAgICAvLyB9OwogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBkaWcgOAogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAzNQogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBwdXNoaW50IDUzIC8vIDUzCiAgICArCiAgICBkaWcgMwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBsb2coZW5jb2RlQXJjNChhc3NldEluZm8pKTsKICAgIGxvZwogICAgYiBnZXRBc3NldHNfYWZ0ZXJfaWZfZWxzZUA2CgpnZXRBc3NldHNfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIHJldHVybiB0aGlzLmdldEVtcHR5QXNzZXRJbmZvKDApOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZ2V0RW1wdHlBc3NldEluZm8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldFBvb2xCYWxhbmNlc0FuZExhc3RQYXlvdXRzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNjkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcHBsaWNhdGlvbj4KICAgIGludGNfMCAvLyAwCgpnZXRQb29sQmFsYW5jZXNBbmRMYXN0UGF5b3V0c19mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIGZvciAoY29uc3QgcG9vbEFwcCBvZiBwb29sQXBwSWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXRQb29sQmFsYW5jZXNBbmRMYXN0UGF5b3V0c19hZnRlcl9mb3JANQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gY29uc3QgYmFsYW5jZSA9IG9wLmJhbGFuY2UocG9vbEFwcC5hZGRyZXNzKTsKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgYmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBjb25zdCBbbGFzdFBheW91dF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQocG9vbEFwcCwgQnl0ZXNgbGFzdFBheW91dGApOwogICAgc3dhcAogICAgcHVzaGJ5dGVzICJsYXN0UGF5b3V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyBsb2coZW5jb2RlQXJjNChbYmFsYW5jZSwgbGFzdFBheW91dF0gYXMgQmFsYW5jZUFuZExhc3RQYXlvdXQpKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldFBvb2xCYWxhbmNlc0FuZExhc3RQYXlvdXRzX2Zvcl9oZWFkZXJAMgoKZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHNfYWZ0ZXJfZm9yQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNjkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldFJlbW90ZVZhbGlkYXRvckNvbmZpZyhyZWdpc3RyeUFwcElkOiB1aW50NjQsIHZhbGlkYXRvcklkOiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRSZW1vdGVWYWxpZGF0b3JDb25maWc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHJpdmF0ZSBnZXRSZW1vdGVWYWxpZGF0b3JDb25maWcocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogVmFsaWRhdG9yQ29uZmlnIHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6ODMtODYKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvckNvbmZpZyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6ODMtODYKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvckNvbmZpZyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3NWFmZjYxZCAvLyBtZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDI0MiAvLyAyNDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIFZhbGlkYXRvckNvbmZpZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KSAtPiBieXRlczoKZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjAKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogVmFsaWRhdG9yQ3VyU3RhdGUgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjEtMTI0CiAgICAvLyByZXR1cm4gY29tcGlsZUFyYzQoUmV0aSkuY2FsbC5nZXRWYWxpZGF0b3JTdGF0ZSh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjEyMS0xMjQKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvclN0YXRlKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweDFmMmYwMTA5IC8vIG1ldGhvZCAiZ2V0VmFsaWRhdG9yU3RhdGUodWludDY0KSh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDI2IC8vIDI2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBWYWxpZGF0b3JDdXJTdGF0ZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0UmVtb3RlUG9vbEluZm8ocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KSAtPiBieXRlczoKZ2V0UmVtb3RlUG9vbEluZm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlUG9vbEluZm8ocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogUG9vbEluZm9bXSB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE1MC0xNTMKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFBvb2xzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE1MgogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTUwLTE1MwogICAgLy8gcmV0dXJuIGNvbXBpbGVBcmM0KFJldGkpLmNhbGwuZ2V0UG9vbHMoewogICAgLy8gICBhcHBJZDogcmVnaXN0cnlBcHBJZCwKICAgIC8vICAgYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4OTEwZTk0YWMgLy8gbWV0aG9kICJnZXRQb29scyh1aW50NjQpKHVpbnQ2NCx1aW50MTYsdWludDY0KVtdIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8UG9vbEluZm8+CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRSZW1vdGVOb2RlUG9vbEFzc2lnbm1lbnRzKHJlZ2lzdHJ5QXBwSWQ6IHVpbnQ2NCwgdmFsaWRhdG9ySWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlTm9kZVBvb2xBc3NpZ25tZW50cyhyZWdpc3RyeUFwcElkOiB1aW50NjQsIHZhbGlkYXRvcklkOiB1aW50NjQpOiBOb2RlUG9vbEFzc2lnbm1lbnRDb25maWcgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNzYtMTc5CiAgICAvLyByZXR1cm4gY29tcGlsZUFyYzQoUmV0aSkuY2FsbC5nZXROb2RlUG9vbEFzc2lnbm1lbnRzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTc2LTE3OQogICAgLy8gcmV0dXJuIGNvbXBpbGVBcmM0KFJldGkpLmNhbGwuZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmJiNmM4ZCAvLyBtZXRob2QgImdldE5vZGVQb29sQXNzaWdubWVudHModWludDY0KSgodWludDY0WzNdKVs4XSkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTkyIC8vIDE5MgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgTm9kZVBvb2xBc3NpZ25tZW50Q29uZmlnCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRFbXB0eUFzc2V0SW5mbyhhc3NldElkOiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRFbXB0eUFzc2V0SW5mbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gcHJpdmF0ZSBnZXRFbXB0eUFzc2V0SW5mbyhhc3NldElkOiB1aW50NjQpOiBBc3NldEluZm8gewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNjEKICAgIC8vIGNyZWF0b3I6IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjU5LTI2NgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgYXNzZXRJZDogYXNzZXRJZCwKICAgIC8vICAgY3JlYXRvcjogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICB0b3RhbDogMCwKICAgIC8vICAgZGVjaW1hbHM6IG5ldyBVaW50OCgwKSwKICAgIC8vICAgdW5pdE5hbWU6ICIiLAogICAgLy8gICBuYW1lOiAiIiwKICAgIC8vIH07CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjYyCiAgICAvLyB0b3RhbDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNTktMjY2CiAgICAvLyByZXR1cm4gewogICAgLy8gICBhc3NldElkOiBhc3NldElkLAogICAgLy8gICBjcmVhdG9yOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIHRvdGFsOiAwLAogICAgLy8gICBkZWNpbWFsczogbmV3IFVpbnQ4KDApLAogICAgLy8gICB1bml0TmFtZTogIiIsCiAgICAvLyAgIG5hbWU6ICIiLAogICAgLy8gfTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAwMDM1MDAzNzAwMDAwMDAwCiAgICBjb25jYXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAgBAiYCBBUffHUeFR98dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMRtBAFIxGRREggoE17+ERQSExEJaBCTgDIAEu4gpJwSmLxEyBMLJimsEPTuLSgS7RgvuBAzCndgE8ZTseTYaAI4KABIAeAGyAfQCagNyBcMF+gZWBvUAJDEZkIEwGjEYEEQxADIJEkM2GgFJFSMSRBexgASKhxQtshoishlJshiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJFYEgEkSxgATRNmzDshoishlMshiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJFYFYEkRQSbAoTFCwJEM2GgFJFSMSRBc2GgJHAiJZSU4CIwslCEwVEkQiSUsCDEEAG0sCVwIASwFJTgIjC1tLBUyIBqiwJAhFAUL/3oD2ARUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAkQzYaAUkVIxJEFzYaAkcCIllJTgIjCyUITBUSRCJJSwIMQQAbSwJXAgBLAUlOAiMLW0sFTIgFo7AkCEUBQv/eKbAkQyKAAEcCNhoBSRUjEkQXNhoCRwIiWUlOAiMLJQhMFRJEIklLAgxBAEpLAlcCAEsBIwtbSUUGSwRMiAWQSUUJIllFByJFBksFSwcMQQAdSwdXAgBLBklOAoESC4ESWEsGFkxQsCQIRQZC/9tJJAhFAUL/rymwJEM2GgFJFSMSRBc2GgJHAiJZSU4CIwslCEwVEkQiSUsCDEEAG0sCVwIASwFJTgIjC1tLBUyIBVqwJAhFAUL/3oDEARUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwJEM2GgFJFSMSRBc2GgJHAiJZSU4CIwslCEwVEkQiSUsCDEEAQksCVwIASwFJTgIjC1tLBUlOAksBiAOqSwJLAogD2EsDSwOIBAVPBE8EiAQ5TwNPA1CAAgHOUExQTFCwJAhFAUL/t4DmAxUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAALAkQzYaAUkVIxJEFzEETAkkCTECJAlLAQ1BAA1HAtEBFrAkCEUBQv/pgAwVH3x1AAAAAAAAAACwJEMiNhoBRwIiWUlOAiMLJQhMFRJEIklLAgxBADZLAlcCAEsBIwtbgAhhbGdvZFZlcmVMRQVBABNLA0kVFlcGAkxQsEkkCEUBQv/LgAIAALBC//CABhUffHUAALAkQyI2GgFHAiJZSU4CIwslCEwVEkQiSUsCDEEAeksCVwIASwEjC1tJcQtMRQZAAAyIAaiwSSQIRQFC/9pJcQBESwFxAUQWSZMjDkRXBwFLAnEDREsDcQRETwQWSwhQTwQWUE8DUEsCFRZXBgJPA1BMgAIANVBLARWBNQhLAxUWVwYCTwRQTBZXBgJPAkxQTwJQTFCwQv+dIogBQChMULAkQzYaAUcCIllJTgIjCyUITBUSRCJJSwIMQQAuSwJXAgBLAUlOAiMLW0lyCERgTIAKbGFzdFBheW91dGVITBZMFlCwJAhFAUL/y4AUFR98dQAAAAAAAAAAAAAAAAAAAACwJEOKAgGxi/8WgAR1r/YdshqyGiKyGYv+shiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJFYHyARJEiYoCAbGL/xaABB8vAQmyGrIaIrIZi/6yGIEGshAisgGztD5JVwQATFcABCgSREkVgRoSRImKAgGxi/8WgASRDpSsshqyGiKyGYv+shiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJIlmBEgslCEsBFRJEiYoCAbGL/xaABHu7bI2yGrIaIrIZi/6yGIEGshAisgGztD5JVwQATFcABCgSREkVgcABEkSJigEBMgOL/xZMUCIWUIAJAAA1ADcAAAAAUIk=", "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 AssetInfo to the struct representation
19
+ */
20
+ export function AssetInfoFromTuple(abiTuple) {
21
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetInfo, APP_SPEC.structs);
22
+ }
23
+ /**
24
+ * Converts the ABI tuple representation of a Constraints to the struct representation
25
+ */
26
+ export function ConstraintsFromTuple(abiTuple) {
27
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.Constraints, APP_SPEC.structs);
28
+ }
29
+ /**
30
+ * Converts the ABI tuple representation of a MbrAmounts to the struct representation
31
+ */
32
+ export function MbrAmountsFromTuple(abiTuple) {
33
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.MbrAmounts, APP_SPEC.structs);
34
+ }
35
+ /**
36
+ * Converts the ABI tuple representation of a NodePoolAssignmentConfig to the struct representation
37
+ */
38
+ export function NodePoolAssignmentConfigFromTuple(abiTuple) {
39
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.NodePoolAssignmentConfig, APP_SPEC.structs);
40
+ }
41
+ /**
42
+ * Converts the ABI tuple representation of a PoolInfo to the struct representation
43
+ */
44
+ export function PoolInfoFromTuple(abiTuple) {
45
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.PoolInfo, APP_SPEC.structs);
46
+ }
47
+ /**
48
+ * Converts the ABI tuple representation of a ValidatorConfig to the struct representation
49
+ */
50
+ export function ValidatorConfigFromTuple(abiTuple) {
51
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorConfig, APP_SPEC.structs);
52
+ }
53
+ /**
54
+ * Converts the ABI tuple representation of a ValidatorCurState to the struct representation
55
+ */
56
+ export function ValidatorCurStateFromTuple(abiTuple) {
57
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorCurState, APP_SPEC.structs);
58
+ }
59
+ /**
60
+ * Converts the ABI tuple representation of a MbrAmountsAndProtocolConstraints to the struct representation
61
+ */
62
+ export function MbrAmountsAndProtocolConstraintsFromTuple(abiTuple) {
63
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.MbrAmountsAndProtocolConstraints, APP_SPEC.structs);
64
+ }
65
+ /**
66
+ * Converts the ABI tuple representation of a Validator to the struct representation
67
+ */
68
+ export function ValidatorFromTuple(abiTuple) {
69
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.Validator, APP_SPEC.structs);
70
+ }
71
+ /**
72
+ * Converts the ABI tuple representation of a ValidatorPoolInfo to the struct representation
73
+ */
74
+ export function ValidatorPoolInfoFromTuple(abiTuple) {
75
+ return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorPoolInfo, APP_SPEC.structs);
76
+ }
77
+ /**
78
+ * Exposes methods for constructing `AppClient` params objects for ABI calls to the RetiReader smart contract
79
+ */
80
+ export class RetiReaderParamsFactory {
81
+ /**
82
+ * Gets available create ABI call param factories
83
+ */
84
+ static get create() {
85
+ return {
86
+ _resolveByMethod(params) {
87
+ switch (params.method) {
88
+ case 'getMbrAmountsAndProtocolConstraints':
89
+ case 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))':
90
+ return RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params);
91
+ case 'getValidatorConfig':
92
+ case 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)':
93
+ return RetiReaderParamsFactory.create.getValidatorConfig(params);
94
+ case 'getValidatorStates':
95
+ case 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)':
96
+ return RetiReaderParamsFactory.create.getValidatorStates(params);
97
+ case 'getPools':
98
+ case 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))':
99
+ return RetiReaderParamsFactory.create.getPools(params);
100
+ case 'getNodePoolAssignments':
101
+ case 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])':
102
+ return RetiReaderParamsFactory.create.getNodePoolAssignments(params);
103
+ case 'getValidators':
104
+ case 'getValidators(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]))':
105
+ return RetiReaderParamsFactory.create.getValidators(params);
106
+ case 'getBlockTimestamps':
107
+ case 'getBlockTimestamps(uint64)uint64':
108
+ return RetiReaderParamsFactory.create.getBlockTimestamps(params);
109
+ case 'getAlgodVersion':
110
+ case 'getAlgodVersion(uint64[])string':
111
+ return RetiReaderParamsFactory.create.getAlgodVersion(params);
112
+ case 'getAssets':
113
+ case 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)':
114
+ return RetiReaderParamsFactory.create.getAssets(params);
115
+ case 'getPoolBalancesAndLastPayouts':
116
+ case 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)':
117
+ return RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params);
118
+ }
119
+ throw new Error(`Unknown ' + verb + ' method`);
120
+ },
121
+ /**
122
+ * Constructs create ABI call params for the RetiReader smart contract using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method
123
+ *
124
+ * @param params Parameters for the call
125
+ * @returns An `AppClientMethodCallParams` object for the call
126
+ */
127
+ getMbrAmountsAndProtocolConstraints(params) {
128
+ return {
129
+ ...params,
130
+ method: 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))',
131
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId],
132
+ };
133
+ },
134
+ /**
135
+ * 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
136
+ *
137
+ * @param params Parameters for the call
138
+ * @returns An `AppClientMethodCallParams` object for the call
139
+ */
140
+ getValidatorConfig(params) {
141
+ return {
142
+ ...params,
143
+ method: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
144
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
145
+ };
146
+ },
147
+ /**
148
+ * Constructs create ABI call params for the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method
149
+ *
150
+ * @param params Parameters for the call
151
+ * @returns An `AppClientMethodCallParams` object for the call
152
+ */
153
+ getValidatorStates(params) {
154
+ return {
155
+ ...params,
156
+ method: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
157
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
158
+ };
159
+ },
160
+ /**
161
+ * Constructs create ABI call params for the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method
162
+ *
163
+ * @param params Parameters for the call
164
+ * @returns An `AppClientMethodCallParams` object for the call
165
+ */
166
+ getPools(params) {
167
+ return {
168
+ ...params,
169
+ method: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
170
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
171
+ };
172
+ },
173
+ /**
174
+ * Constructs create ABI call params for the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method
175
+ *
176
+ * @param params Parameters for the call
177
+ * @returns An `AppClientMethodCallParams` object for the call
178
+ */
179
+ getNodePoolAssignments(params) {
180
+ return {
181
+ ...params,
182
+ method: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
183
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
184
+ };
185
+ },
186
+ /**
187
+ * Constructs create ABI call params for the RetiReader smart contract using the getValidators(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
188
+ *
189
+ * @param params Parameters for the call
190
+ * @returns An `AppClientMethodCallParams` object for the call
191
+ */
192
+ getValidators(params) {
193
+ return {
194
+ ...params,
195
+ method: 'getValidators(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]))',
196
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
197
+ };
198
+ },
199
+ /**
200
+ * Constructs create ABI call params for the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method
201
+ *
202
+ * @param params Parameters for the call
203
+ * @returns An `AppClientMethodCallParams` object for the call
204
+ */
205
+ getBlockTimestamps(params) {
206
+ return {
207
+ ...params,
208
+ method: 'getBlockTimestamps(uint64)uint64',
209
+ args: Array.isArray(params.args) ? params.args : [params.args.num],
210
+ };
211
+ },
212
+ /**
213
+ * Constructs create ABI call params for the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method
214
+ *
215
+ * @param params Parameters for the call
216
+ * @returns An `AppClientMethodCallParams` object for the call
217
+ */
218
+ getAlgodVersion(params) {
219
+ return {
220
+ ...params,
221
+ method: 'getAlgodVersion(uint64[])string',
222
+ args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
223
+ };
224
+ },
225
+ /**
226
+ * Constructs create ABI call params for the RetiReader smart contract using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method
227
+ *
228
+ * @param params Parameters for the call
229
+ * @returns An `AppClientMethodCallParams` object for the call
230
+ */
231
+ getAssets(params) {
232
+ return {
233
+ ...params,
234
+ method: 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)',
235
+ args: Array.isArray(params.args) ? params.args : [params.args.assetIds],
236
+ };
237
+ },
238
+ /**
239
+ * Constructs create ABI call params for the RetiReader smart contract using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method
240
+ *
241
+ * @param params Parameters for the call
242
+ * @returns An `AppClientMethodCallParams` object for the call
243
+ */
244
+ getPoolBalancesAndLastPayouts(params) {
245
+ return {
246
+ ...params,
247
+ method: 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)',
248
+ args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
249
+ };
250
+ },
251
+ };
252
+ }
253
+ /**
254
+ * Constructs a no op call for the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method
255
+ *
256
+ * @param params Parameters for the call
257
+ * @returns An `AppClientMethodCallParams` object for the call
258
+ */
259
+ static getMbrAmountsAndProtocolConstraints(params) {
260
+ return {
261
+ ...params,
262
+ method: 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))',
263
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId],
264
+ };
265
+ }
266
+ /**
267
+ * 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
268
+ *
269
+ * @param params Parameters for the call
270
+ * @returns An `AppClientMethodCallParams` object for the call
271
+ */
272
+ static getValidatorConfig(params) {
273
+ return {
274
+ ...params,
275
+ method: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
276
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
277
+ };
278
+ }
279
+ /**
280
+ * Constructs a no op call for the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method
281
+ *
282
+ * @param params Parameters for the call
283
+ * @returns An `AppClientMethodCallParams` object for the call
284
+ */
285
+ static getValidatorStates(params) {
286
+ return {
287
+ ...params,
288
+ method: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
289
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
290
+ };
291
+ }
292
+ /**
293
+ * Constructs a no op call for the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method
294
+ *
295
+ * @param params Parameters for the call
296
+ * @returns An `AppClientMethodCallParams` object for the call
297
+ */
298
+ static getPools(params) {
299
+ return {
300
+ ...params,
301
+ method: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
302
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
303
+ };
304
+ }
305
+ /**
306
+ * Constructs a no op call for the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method
307
+ *
308
+ * @param params Parameters for the call
309
+ * @returns An `AppClientMethodCallParams` object for the call
310
+ */
311
+ static getNodePoolAssignments(params) {
312
+ return {
313
+ ...params,
314
+ method: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
315
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
316
+ };
317
+ }
318
+ /**
319
+ * Constructs a no op call for the getValidators(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
320
+ *
321
+ * @param params Parameters for the call
322
+ * @returns An `AppClientMethodCallParams` object for the call
323
+ */
324
+ static getValidators(params) {
325
+ return {
326
+ ...params,
327
+ method: 'getValidators(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]))',
328
+ args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
329
+ };
330
+ }
331
+ /**
332
+ * Constructs a no op call for the getBlockTimestamps(uint64)uint64 ABI method
333
+ *
334
+ * @param params Parameters for the call
335
+ * @returns An `AppClientMethodCallParams` object for the call
336
+ */
337
+ static getBlockTimestamps(params) {
338
+ return {
339
+ ...params,
340
+ method: 'getBlockTimestamps(uint64)uint64',
341
+ args: Array.isArray(params.args) ? params.args : [params.args.num],
342
+ };
343
+ }
344
+ /**
345
+ * Constructs a no op call for the getAlgodVersion(uint64[])string ABI method
346
+ *
347
+ * @param params Parameters for the call
348
+ * @returns An `AppClientMethodCallParams` object for the call
349
+ */
350
+ static getAlgodVersion(params) {
351
+ return {
352
+ ...params,
353
+ method: 'getAlgodVersion(uint64[])string',
354
+ args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
355
+ };
356
+ }
357
+ /**
358
+ * Constructs a no op call for the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method
359
+ *
360
+ * @param params Parameters for the call
361
+ * @returns An `AppClientMethodCallParams` object for the call
362
+ */
363
+ static getAssets(params) {
364
+ return {
365
+ ...params,
366
+ method: 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)',
367
+ args: Array.isArray(params.args) ? params.args : [params.args.assetIds],
368
+ };
369
+ }
370
+ /**
371
+ * Constructs a no op call for the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method
372
+ *
373
+ * @param params Parameters for the call
374
+ * @returns An `AppClientMethodCallParams` object for the call
375
+ */
376
+ static getPoolBalancesAndLastPayouts(params) {
377
+ return {
378
+ ...params,
379
+ method: 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)',
380
+ args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
381
+ };
382
+ }
383
+ }
384
+ /**
385
+ * 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
386
+ */
387
+ class RetiReaderFactory {
388
+ /**
389
+ * The underlying `AppFactory` for when you want to have more flexibility
390
+ */
391
+ appFactory;
392
+ /**
393
+ * Creates a new instance of `RetiReaderFactory`
394
+ *
395
+ * @param params The parameters to initialise the app factory with
396
+ */
397
+ constructor(params) {
398
+ this.appFactory = new _AppFactory({
399
+ ...params,
400
+ appSpec: APP_SPEC,
401
+ });
402
+ }
403
+ /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
404
+ get appName() {
405
+ return this.appFactory.appName;
406
+ }
407
+ /** The ARC-56 app spec being used */
408
+ get appSpec() {
409
+ return APP_SPEC;
410
+ }
411
+ /** A reference to the underlying `AlgorandClient` this app factory is using. */
412
+ get algorand() {
413
+ return this.appFactory.algorand;
414
+ }
415
+ /**
416
+ * Returns a new `AppClient` client for an app instance of the given ID.
417
+ *
418
+ * Automatically populates appName, defaultSender and source maps from the factory
419
+ * if not specified in the params.
420
+ * @param params The parameters to create the app client
421
+ * @returns The `AppClient`
422
+ */
423
+ getAppClientById(params) {
424
+ return new RetiReaderClient(this.appFactory.getAppClientById(params));
425
+ }
426
+ /**
427
+ * Returns a new `AppClient` client, resolving the app by creator address and name
428
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
429
+ *
430
+ * Automatically populates appName, defaultSender and source maps from the factory
431
+ * if not specified in the params.
432
+ * @param params The parameters to create the app client
433
+ * @returns The `AppClient`
434
+ */
435
+ async getAppClientByCreatorAndName(params) {
436
+ return new RetiReaderClient(await this.appFactory.getAppClientByCreatorAndName(params));
437
+ }
438
+ /**
439
+ * Idempotently deploys the RetiReader smart contract.
440
+ *
441
+ * @param params The arguments for the contract calls and any additional parameters for the call
442
+ * @returns The deployment result
443
+ */
444
+ async deploy(params = {}) {
445
+ const result = await this.appFactory.deploy({
446
+ ...params,
447
+ createParams: params.createParams?.method ? RetiReaderParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams : undefined,
448
+ });
449
+ return { result: result.result, appClient: new RetiReaderClient(result.appClient) };
450
+ }
451
+ /**
452
+ * 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.
453
+ */
454
+ params = {
455
+ /**
456
+ * Gets available create methods
457
+ */
458
+ create: {
459
+ /**
460
+ * Creates a new instance of the RetiReader smart contract using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method.
461
+ *
462
+ * @param params The params for the smart contract call
463
+ * @returns The create params
464
+ */
465
+ getMbrAmountsAndProtocolConstraints: (params) => {
466
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params));
467
+ },
468
+ /**
469
+ * 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.
470
+ *
471
+ * @param params The params for the smart contract call
472
+ * @returns The create params
473
+ */
474
+ getValidatorConfig: (params) => {
475
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
476
+ },
477
+ /**
478
+ * Creates a new instance of the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
479
+ *
480
+ * @param params The params for the smart contract call
481
+ * @returns The create params
482
+ */
483
+ getValidatorStates: (params) => {
484
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidatorStates(params));
485
+ },
486
+ /**
487
+ * Creates a new instance of the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
488
+ *
489
+ * @param params The params for the smart contract call
490
+ * @returns The create params
491
+ */
492
+ getPools: (params) => {
493
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getPools(params));
494
+ },
495
+ /**
496
+ * Creates a new instance of the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
497
+ *
498
+ * @param params The params for the smart contract call
499
+ * @returns The create params
500
+ */
501
+ getNodePoolAssignments: (params) => {
502
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
503
+ },
504
+ /**
505
+ * Creates a new instance of the RetiReader smart contract using the getValidators(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.
506
+ *
507
+ * @param params The params for the smart contract call
508
+ * @returns The create params
509
+ */
510
+ getValidators: (params) => {
511
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidators(params));
512
+ },
513
+ /**
514
+ * Creates a new instance of the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method.
515
+ *
516
+ * @param params The params for the smart contract call
517
+ * @returns The create params
518
+ */
519
+ getBlockTimestamps: (params) => {
520
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
521
+ },
522
+ /**
523
+ * Creates a new instance of the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method.
524
+ *
525
+ * @param params The params for the smart contract call
526
+ * @returns The create params
527
+ */
528
+ getAlgodVersion: (params) => {
529
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
530
+ },
531
+ /**
532
+ * Creates a new instance of the RetiReader smart contract using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method.
533
+ *
534
+ * @param params The params for the smart contract call
535
+ * @returns The create params
536
+ */
537
+ getAssets: (params) => {
538
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getAssets(params));
539
+ },
540
+ /**
541
+ * Creates a new instance of the RetiReader smart contract using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method.
542
+ *
543
+ * @param params The params for the smart contract call
544
+ * @returns The create params
545
+ */
546
+ getPoolBalancesAndLastPayouts: (params) => {
547
+ return this.appFactory.params.create(RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params));
548
+ },
549
+ },
550
+ /**
551
+ * Gets available deployUpdate methods
552
+ */
553
+ deployUpdate: {
554
+ /**
555
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
556
+ *
557
+ * @param params The params for the bare (raw) call
558
+ * @returns The params for a deployUpdate call
559
+ */
560
+ bare: (params) => {
561
+ return this.appFactory.params.bare.deployUpdate(params);
562
+ },
563
+ },
564
+ /**
565
+ * Gets available deployDelete methods
566
+ */
567
+ deployDelete: {
568
+ /**
569
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
570
+ *
571
+ * @param params The params for the bare (raw) call
572
+ * @returns The params for a deployDelete call
573
+ */
574
+ bare: (params) => {
575
+ return this.appFactory.params.bare.deployDelete(params);
576
+ },
577
+ },
578
+ };
579
+ /**
580
+ * Create transactions for the current app
581
+ */
582
+ createTransaction = {
583
+ /**
584
+ * Gets available create methods
585
+ */
586
+ create: {
587
+ /**
588
+ * Creates a new instance of the RetiReader smart contract using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method.
589
+ *
590
+ * @param params The params for the smart contract call
591
+ * @returns The create transaction
592
+ */
593
+ getMbrAmountsAndProtocolConstraints: (params) => {
594
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params));
595
+ },
596
+ /**
597
+ * 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.
598
+ *
599
+ * @param params The params for the smart contract call
600
+ * @returns The create transaction
601
+ */
602
+ getValidatorConfig: (params) => {
603
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
604
+ },
605
+ /**
606
+ * Creates a new instance of the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
607
+ *
608
+ * @param params The params for the smart contract call
609
+ * @returns The create transaction
610
+ */
611
+ getValidatorStates: (params) => {
612
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidatorStates(params));
613
+ },
614
+ /**
615
+ * Creates a new instance of the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
616
+ *
617
+ * @param params The params for the smart contract call
618
+ * @returns The create transaction
619
+ */
620
+ getPools: (params) => {
621
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getPools(params));
622
+ },
623
+ /**
624
+ * Creates a new instance of the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
625
+ *
626
+ * @param params The params for the smart contract call
627
+ * @returns The create transaction
628
+ */
629
+ getNodePoolAssignments: (params) => {
630
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
631
+ },
632
+ /**
633
+ * Creates a new instance of the RetiReader smart contract using the getValidators(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.
634
+ *
635
+ * @param params The params for the smart contract call
636
+ * @returns The create transaction
637
+ */
638
+ getValidators: (params) => {
639
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidators(params));
640
+ },
641
+ /**
642
+ * Creates a new instance of the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method.
643
+ *
644
+ * @param params The params for the smart contract call
645
+ * @returns The create transaction
646
+ */
647
+ getBlockTimestamps: (params) => {
648
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
649
+ },
650
+ /**
651
+ * Creates a new instance of the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method.
652
+ *
653
+ * @param params The params for the smart contract call
654
+ * @returns The create transaction
655
+ */
656
+ getAlgodVersion: (params) => {
657
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
658
+ },
659
+ /**
660
+ * Creates a new instance of the RetiReader smart contract using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method.
661
+ *
662
+ * @param params The params for the smart contract call
663
+ * @returns The create transaction
664
+ */
665
+ getAssets: (params) => {
666
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getAssets(params));
667
+ },
668
+ /**
669
+ * Creates a new instance of the RetiReader smart contract using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method.
670
+ *
671
+ * @param params The params for the smart contract call
672
+ * @returns The create transaction
673
+ */
674
+ getPoolBalancesAndLastPayouts: (params) => {
675
+ return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params));
676
+ },
677
+ },
678
+ };
679
+ /**
680
+ * Send calls to the current app
681
+ */
682
+ send = {
683
+ /**
684
+ * Gets available create methods
685
+ */
686
+ create: {
687
+ /**
688
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method.
689
+ *
690
+ * @param params The params for the smart contract call
691
+ * @returns The create result
692
+ */
693
+ getMbrAmountsAndProtocolConstraints: async (params) => {
694
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params));
695
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
696
+ },
697
+ /**
698
+ * 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.
699
+ *
700
+ * @param params The params for the smart contract call
701
+ * @returns The create result
702
+ */
703
+ getValidatorConfig: async (params) => {
704
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
705
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
706
+ },
707
+ /**
708
+ * 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.
709
+ *
710
+ * @param params The params for the smart contract call
711
+ * @returns The create result
712
+ */
713
+ getValidatorStates: async (params) => {
714
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidatorStates(params));
715
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
716
+ },
717
+ /**
718
+ * 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.
719
+ *
720
+ * @param params The params for the smart contract call
721
+ * @returns The create result
722
+ */
723
+ getPools: async (params) => {
724
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getPools(params));
725
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
726
+ },
727
+ /**
728
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
729
+ *
730
+ * @param params The params for the smart contract call
731
+ * @returns The create result
732
+ */
733
+ getNodePoolAssignments: async (params) => {
734
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
735
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
736
+ },
737
+ /**
738
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getValidators(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.
739
+ *
740
+ * @param params The params for the smart contract call
741
+ * @returns The create result
742
+ */
743
+ getValidators: async (params) => {
744
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidators(params));
745
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
746
+ },
747
+ /**
748
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getBlockTimestamps(uint64)uint64 ABI method.
749
+ *
750
+ * @param params The params for the smart contract call
751
+ * @returns The create result
752
+ */
753
+ getBlockTimestamps: async (params) => {
754
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
755
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
756
+ },
757
+ /**
758
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getAlgodVersion(uint64[])string ABI method.
759
+ *
760
+ * @param params The params for the smart contract call
761
+ * @returns The create result
762
+ */
763
+ getAlgodVersion: async (params) => {
764
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
765
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
766
+ },
767
+ /**
768
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method.
769
+ *
770
+ * @param params The params for the smart contract call
771
+ * @returns The create result
772
+ */
773
+ getAssets: async (params) => {
774
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getAssets(params));
775
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
776
+ },
777
+ /**
778
+ * Creates a new instance of the RetiReader smart contract using an ABI method call using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method.
779
+ *
780
+ * @param params The params for the smart contract call
781
+ * @returns The create result
782
+ */
783
+ getPoolBalancesAndLastPayouts: async (params) => {
784
+ const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params));
785
+ return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
786
+ },
787
+ },
788
+ };
789
+ }
790
+ /**
791
+ * A client to make calls to the RetiReader smart contract
792
+ */
793
+ class RetiReaderClient {
794
+ /**
795
+ * The underlying `AppClient` for when you want to have more flexibility
796
+ */
797
+ appClient;
798
+ constructor(appClientOrParams) {
799
+ this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({
800
+ ...appClientOrParams,
801
+ appSpec: APP_SPEC,
802
+ });
803
+ }
804
+ /**
805
+ * Checks for decode errors on the given return value and maps the return value to the return type for the given method
806
+ * @returns The typed return value or undefined if there was no value
807
+ */
808
+ decodeReturnValue(method, returnValue) {
809
+ return returnValue !== undefined ? getArc56ReturnValue(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined;
810
+ }
811
+ /**
812
+ * Returns a new `RetiReaderClient` client, resolving the app by creator address and name
813
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
814
+ * @param params The parameters to create the app client
815
+ */
816
+ static async fromCreatorAndName(params) {
817
+ return new RetiReaderClient(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));
818
+ }
819
+ /**
820
+ * Returns an `RetiReaderClient` instance for the current network based on
821
+ * pre-determined network-specific app IDs specified in the ARC-56 app spec.
822
+ *
823
+ * If no IDs are in the app spec or the network isn't recognised, an error is thrown.
824
+ * @param params The parameters to create the app client
825
+ */
826
+ static async fromNetwork(params) {
827
+ return new RetiReaderClient(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));
828
+ }
829
+ /** The ID of the app instance this client is linked to. */
830
+ get appId() {
831
+ return this.appClient.appId;
832
+ }
833
+ /** The app address of the app instance this client is linked to. */
834
+ get appAddress() {
835
+ return this.appClient.appAddress;
836
+ }
837
+ /** The name of the app. */
838
+ get appName() {
839
+ return this.appClient.appName;
840
+ }
841
+ /** The ARC-56 app spec being used */
842
+ get appSpec() {
843
+ return this.appClient.appSpec;
844
+ }
845
+ /** A reference to the underlying `AlgorandClient` this app client is using. */
846
+ get algorand() {
847
+ return this.appClient.algorand;
848
+ }
849
+ /**
850
+ * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
851
+ */
852
+ params = {
853
+ /**
854
+ * Gets available update methods
855
+ */
856
+ update: {
857
+ /**
858
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
859
+ *
860
+ * @param params The params for the bare (raw) call
861
+ * @returns The update result
862
+ */
863
+ bare: (params) => {
864
+ return this.appClient.params.bare.update(params);
865
+ },
866
+ },
867
+ /**
868
+ * Gets available delete methods
869
+ */
870
+ delete: {
871
+ /**
872
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
873
+ *
874
+ * @param params The params for the bare (raw) call
875
+ * @returns The delete result
876
+ */
877
+ bare: (params) => {
878
+ return this.appClient.params.bare.delete(params);
879
+ },
880
+ },
881
+ /**
882
+ * Makes a clear_state call to an existing instance of the RetiReader smart contract.
883
+ *
884
+ * @param params The params for the bare (raw) call
885
+ * @returns The clearState result
886
+ */
887
+ clearState: (params) => {
888
+ return this.appClient.params.bare.clearState(params);
889
+ },
890
+ /**
891
+ * Makes a call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
892
+ *
893
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
894
+ *
895
+ * @param params The params for the smart contract call
896
+ * @returns The call params
897
+ */
898
+ getMbrAmountsAndProtocolConstraints: (params) => {
899
+ return this.appClient.params.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
900
+ },
901
+ /**
902
+ * 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.
903
+ *
904
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
905
+ *
906
+ * @param params The params for the smart contract call
907
+ * @returns The call params
908
+ */
909
+ getValidatorConfig: (params) => {
910
+ return this.appClient.params.call(RetiReaderParamsFactory.getValidatorConfig(params));
911
+ },
912
+ /**
913
+ * Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
914
+ *
915
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
916
+ *
917
+ * @param params The params for the smart contract call
918
+ * @returns The call params
919
+ */
920
+ getValidatorStates: (params) => {
921
+ return this.appClient.params.call(RetiReaderParamsFactory.getValidatorStates(params));
922
+ },
923
+ /**
924
+ * Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
925
+ *
926
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
927
+ *
928
+ * @param params The params for the smart contract call
929
+ * @returns The call params
930
+ */
931
+ getPools: (params) => {
932
+ return this.appClient.params.call(RetiReaderParamsFactory.getPools(params));
933
+ },
934
+ /**
935
+ * Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
936
+ *
937
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
938
+ *
939
+ * @param params The params for the smart contract call
940
+ * @returns The call params
941
+ */
942
+ getNodePoolAssignments: (params) => {
943
+ return this.appClient.params.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
944
+ },
945
+ /**
946
+ * Makes a call to the RetiReader smart contract using the `getValidators(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.
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 params
952
+ */
953
+ getValidators: (params) => {
954
+ return this.appClient.params.call(RetiReaderParamsFactory.getValidators(params));
955
+ },
956
+ /**
957
+ * Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
958
+ *
959
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
960
+ *
961
+ * @param params The params for the smart contract call
962
+ * @returns The call params
963
+ */
964
+ getBlockTimestamps: (params) => {
965
+ return this.appClient.params.call(RetiReaderParamsFactory.getBlockTimestamps(params));
966
+ },
967
+ /**
968
+ * Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
969
+ *
970
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
971
+ *
972
+ * @param params The params for the smart contract call
973
+ * @returns The call params
974
+ */
975
+ getAlgodVersion: (params) => {
976
+ return this.appClient.params.call(RetiReaderParamsFactory.getAlgodVersion(params));
977
+ },
978
+ /**
979
+ * Makes a call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
980
+ *
981
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
982
+ *
983
+ * @param params The params for the smart contract call
984
+ * @returns The call params
985
+ */
986
+ getAssets: (params) => {
987
+ return this.appClient.params.call(RetiReaderParamsFactory.getAssets(params));
988
+ },
989
+ /**
990
+ * Makes a call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
991
+ *
992
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
993
+ *
994
+ * @param params The params for the smart contract call
995
+ * @returns The call params
996
+ */
997
+ getPoolBalancesAndLastPayouts: (params) => {
998
+ return this.appClient.params.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
999
+ },
1000
+ };
1001
+ /**
1002
+ * Create transactions for the current app
1003
+ */
1004
+ createTransaction = {
1005
+ /**
1006
+ * Gets available update methods
1007
+ */
1008
+ update: {
1009
+ /**
1010
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
1011
+ *
1012
+ * @param params The params for the bare (raw) call
1013
+ * @returns The update result
1014
+ */
1015
+ bare: (params) => {
1016
+ return this.appClient.createTransaction.bare.update(params);
1017
+ },
1018
+ },
1019
+ /**
1020
+ * Gets available delete methods
1021
+ */
1022
+ delete: {
1023
+ /**
1024
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
1025
+ *
1026
+ * @param params The params for the bare (raw) call
1027
+ * @returns The delete result
1028
+ */
1029
+ bare: (params) => {
1030
+ return this.appClient.createTransaction.bare.delete(params);
1031
+ },
1032
+ },
1033
+ /**
1034
+ * Makes a clear_state call to an existing instance of the RetiReader smart contract.
1035
+ *
1036
+ * @param params The params for the bare (raw) call
1037
+ * @returns The clearState result
1038
+ */
1039
+ clearState: (params) => {
1040
+ return this.appClient.createTransaction.bare.clearState(params);
1041
+ },
1042
+ /**
1043
+ * Makes a call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
1044
+ *
1045
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1046
+ *
1047
+ * @param params The params for the smart contract call
1048
+ * @returns The call transaction
1049
+ */
1050
+ getMbrAmountsAndProtocolConstraints: (params) => {
1051
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
1052
+ },
1053
+ /**
1054
+ * 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.
1055
+ *
1056
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1057
+ *
1058
+ * @param params The params for the smart contract call
1059
+ * @returns The call transaction
1060
+ */
1061
+ getValidatorConfig: (params) => {
1062
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidatorConfig(params));
1063
+ },
1064
+ /**
1065
+ * Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
1066
+ *
1067
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1068
+ *
1069
+ * @param params The params for the smart contract call
1070
+ * @returns The call transaction
1071
+ */
1072
+ getValidatorStates: (params) => {
1073
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidatorStates(params));
1074
+ },
1075
+ /**
1076
+ * Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` 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 transaction
1082
+ */
1083
+ getPools: (params) => {
1084
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getPools(params));
1085
+ },
1086
+ /**
1087
+ * Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
1088
+ *
1089
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1090
+ *
1091
+ * @param params The params for the smart contract call
1092
+ * @returns The call transaction
1093
+ */
1094
+ getNodePoolAssignments: (params) => {
1095
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
1096
+ },
1097
+ /**
1098
+ * Makes a call to the RetiReader smart contract using the `getValidators(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.
1099
+ *
1100
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1101
+ *
1102
+ * @param params The params for the smart contract call
1103
+ * @returns The call transaction
1104
+ */
1105
+ getValidators: (params) => {
1106
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidators(params));
1107
+ },
1108
+ /**
1109
+ * Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
1110
+ *
1111
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1112
+ *
1113
+ * @param params The params for the smart contract call
1114
+ * @returns The call transaction
1115
+ */
1116
+ getBlockTimestamps: (params) => {
1117
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getBlockTimestamps(params));
1118
+ },
1119
+ /**
1120
+ * Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
1121
+ *
1122
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1123
+ *
1124
+ * @param params The params for the smart contract call
1125
+ * @returns The call transaction
1126
+ */
1127
+ getAlgodVersion: (params) => {
1128
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getAlgodVersion(params));
1129
+ },
1130
+ /**
1131
+ * Makes a call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
1132
+ *
1133
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1134
+ *
1135
+ * @param params The params for the smart contract call
1136
+ * @returns The call transaction
1137
+ */
1138
+ getAssets: (params) => {
1139
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getAssets(params));
1140
+ },
1141
+ /**
1142
+ * Makes a call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
1143
+ *
1144
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1145
+ *
1146
+ * @param params The params for the smart contract call
1147
+ * @returns The call transaction
1148
+ */
1149
+ getPoolBalancesAndLastPayouts: (params) => {
1150
+ return this.appClient.createTransaction.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
1151
+ },
1152
+ };
1153
+ /**
1154
+ * Send calls to the current app
1155
+ */
1156
+ send = {
1157
+ /**
1158
+ * Gets available update methods
1159
+ */
1160
+ update: {
1161
+ /**
1162
+ * Updates an existing instance of the RetiReader smart contract using a bare call.
1163
+ *
1164
+ * @param params The params for the bare (raw) call
1165
+ * @returns The update result
1166
+ */
1167
+ bare: (params) => {
1168
+ return this.appClient.send.bare.update(params);
1169
+ },
1170
+ },
1171
+ /**
1172
+ * Gets available delete methods
1173
+ */
1174
+ delete: {
1175
+ /**
1176
+ * Deletes an existing instance of the RetiReader smart contract using a bare call.
1177
+ *
1178
+ * @param params The params for the bare (raw) call
1179
+ * @returns The delete result
1180
+ */
1181
+ bare: (params) => {
1182
+ return this.appClient.send.bare.delete(params);
1183
+ },
1184
+ },
1185
+ /**
1186
+ * Makes a clear_state call to an existing instance of the RetiReader smart contract.
1187
+ *
1188
+ * @param params The params for the bare (raw) call
1189
+ * @returns The clearState result
1190
+ */
1191
+ clearState: (params) => {
1192
+ return this.appClient.send.bare.clearState(params);
1193
+ },
1194
+ /**
1195
+ * Makes a call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
1196
+ *
1197
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1198
+ *
1199
+ * @param params The params for the smart contract call
1200
+ * @returns The call result
1201
+ */
1202
+ getMbrAmountsAndProtocolConstraints: async (params) => {
1203
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
1204
+ return { ...result, return: result.return };
1205
+ },
1206
+ /**
1207
+ * 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.
1208
+ *
1209
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1210
+ *
1211
+ * @param params The params for the smart contract call
1212
+ * @returns The call result
1213
+ */
1214
+ getValidatorConfig: async (params) => {
1215
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorConfig(params));
1216
+ return { ...result, return: result.return };
1217
+ },
1218
+ /**
1219
+ * Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
1220
+ *
1221
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1222
+ *
1223
+ * @param params The params for the smart contract call
1224
+ * @returns The call result
1225
+ */
1226
+ getValidatorStates: async (params) => {
1227
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorStates(params));
1228
+ return { ...result, return: result.return };
1229
+ },
1230
+ /**
1231
+ * Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
1232
+ *
1233
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1234
+ *
1235
+ * @param params The params for the smart contract call
1236
+ * @returns The call result
1237
+ */
1238
+ getPools: async (params) => {
1239
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getPools(params));
1240
+ return { ...result, return: result.return };
1241
+ },
1242
+ /**
1243
+ * Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
1244
+ *
1245
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1246
+ *
1247
+ * @param params The params for the smart contract call
1248
+ * @returns The call result
1249
+ */
1250
+ getNodePoolAssignments: async (params) => {
1251
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
1252
+ return { ...result, return: result.return };
1253
+ },
1254
+ /**
1255
+ * Makes a call to the RetiReader smart contract using the `getValidators(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.
1256
+ *
1257
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1258
+ *
1259
+ * @param params The params for the smart contract call
1260
+ * @returns The call result
1261
+ */
1262
+ getValidators: async (params) => {
1263
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidators(params));
1264
+ return { ...result, return: result.return };
1265
+ },
1266
+ /**
1267
+ * Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
1268
+ *
1269
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1270
+ *
1271
+ * @param params The params for the smart contract call
1272
+ * @returns The call result
1273
+ */
1274
+ getBlockTimestamps: async (params) => {
1275
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getBlockTimestamps(params));
1276
+ return { ...result, return: result.return };
1277
+ },
1278
+ /**
1279
+ * Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
1280
+ *
1281
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1282
+ *
1283
+ * @param params The params for the smart contract call
1284
+ * @returns The call result
1285
+ */
1286
+ getAlgodVersion: async (params) => {
1287
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAlgodVersion(params));
1288
+ return { ...result, return: result.return };
1289
+ },
1290
+ /**
1291
+ * Makes a call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
1292
+ *
1293
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1294
+ *
1295
+ * @param params The params for the smart contract call
1296
+ * @returns The call result
1297
+ */
1298
+ getAssets: async (params) => {
1299
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAssets(params));
1300
+ return { ...result, return: result.return };
1301
+ },
1302
+ /**
1303
+ * Makes a call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
1304
+ *
1305
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1306
+ *
1307
+ * @param params The params for the smart contract call
1308
+ * @returns The call result
1309
+ */
1310
+ getPoolBalancesAndLastPayouts: async (params) => {
1311
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
1312
+ return { ...result, return: result.return };
1313
+ },
1314
+ };
1315
+ /**
1316
+ * Clone this app client with different params
1317
+ *
1318
+ * @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.
1319
+ * @returns A new app client with the altered params
1320
+ */
1321
+ clone(params) {
1322
+ return new RetiReaderClient(this.appClient.clone(params));
1323
+ }
1324
+ /**
1325
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
1326
+ *
1327
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1328
+ *
1329
+ * @param params The params for the smart contract call
1330
+ * @returns The call result
1331
+ */
1332
+ async getMbrAmountsAndProtocolConstraints(params) {
1333
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
1334
+ return result.return;
1335
+ }
1336
+ /**
1337
+ * 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.
1338
+ *
1339
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1340
+ *
1341
+ * @param params The params for the smart contract call
1342
+ * @returns The call result
1343
+ */
1344
+ async getValidatorConfig(params) {
1345
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorConfig(params));
1346
+ return result.return;
1347
+ }
1348
+ /**
1349
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
1350
+ *
1351
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1352
+ *
1353
+ * @param params The params for the smart contract call
1354
+ * @returns The call result
1355
+ */
1356
+ async getValidatorStates(params) {
1357
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorStates(params));
1358
+ return result.return;
1359
+ }
1360
+ /**
1361
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
1362
+ *
1363
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1364
+ *
1365
+ * @param params The params for the smart contract call
1366
+ * @returns The call result
1367
+ */
1368
+ async getPools(params) {
1369
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getPools(params));
1370
+ return result.return;
1371
+ }
1372
+ /**
1373
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
1374
+ *
1375
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1376
+ *
1377
+ * @param params The params for the smart contract call
1378
+ * @returns The call result
1379
+ */
1380
+ async getNodePoolAssignments(params) {
1381
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
1382
+ return result.return;
1383
+ }
1384
+ /**
1385
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getValidators(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.
1386
+ *
1387
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1388
+ *
1389
+ * @param params The params for the smart contract call
1390
+ * @returns The call result
1391
+ */
1392
+ async getValidators(params) {
1393
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidators(params));
1394
+ return result.return;
1395
+ }
1396
+ /**
1397
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
1398
+ *
1399
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1400
+ *
1401
+ * @param params The params for the smart contract call
1402
+ * @returns The call result
1403
+ */
1404
+ async getBlockTimestamps(params) {
1405
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getBlockTimestamps(params));
1406
+ return result.return;
1407
+ }
1408
+ /**
1409
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
1410
+ *
1411
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1412
+ *
1413
+ * @param params The params for the smart contract call
1414
+ * @returns The call result
1415
+ */
1416
+ async getAlgodVersion(params) {
1417
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAlgodVersion(params));
1418
+ return result.return;
1419
+ }
1420
+ /**
1421
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
1422
+ *
1423
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1424
+ *
1425
+ * @param params The params for the smart contract call
1426
+ * @returns The call result
1427
+ */
1428
+ async getAssets(params) {
1429
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getAssets(params));
1430
+ return result.return;
1431
+ }
1432
+ /**
1433
+ * Makes a readonly (simulated) call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
1434
+ *
1435
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1436
+ *
1437
+ * @param params The params for the smart contract call
1438
+ * @returns The call result
1439
+ */
1440
+ async getPoolBalancesAndLastPayouts(params) {
1441
+ const result = await this.appClient.send.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
1442
+ return result.return;
1443
+ }
1444
+ /**
1445
+ * Methods to access state for the current RetiReader app
1446
+ */
1447
+ state = {};
1448
+ newGroup() {
1449
+ const client = this;
1450
+ const composer = this.algorand.newGroup();
1451
+ let promiseChain = Promise.resolve();
1452
+ const resultMappers = [];
1453
+ return {
1454
+ /**
1455
+ * Add a getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) method call against the RetiReader contract
1456
+ */
1457
+ getMbrAmountsAndProtocolConstraints(params) {
1458
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getMbrAmountsAndProtocolConstraints(params)));
1459
+ resultMappers.push((v) => client.decodeReturnValue('getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))', v));
1460
+ return this;
1461
+ },
1462
+ /**
1463
+ * 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
1464
+ */
1465
+ getValidatorConfig(params) {
1466
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidatorConfig(params)));
1467
+ 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));
1468
+ return this;
1469
+ },
1470
+ /**
1471
+ * Add a getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) method call against the RetiReader contract
1472
+ */
1473
+ getValidatorStates(params) {
1474
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidatorStates(params)));
1475
+ resultMappers.push((v) => client.decodeReturnValue('getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)', v));
1476
+ return this;
1477
+ },
1478
+ /**
1479
+ * Add a getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) method call against the RetiReader contract
1480
+ */
1481
+ getPools(params) {
1482
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getPools(params)));
1483
+ resultMappers.push((v) => client.decodeReturnValue('getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))', v));
1484
+ return this;
1485
+ },
1486
+ /**
1487
+ * Add a getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) method call against the RetiReader contract
1488
+ */
1489
+ getNodePoolAssignments(params) {
1490
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getNodePoolAssignments(params)));
1491
+ resultMappers.push((v) => client.decodeReturnValue('getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])', v));
1492
+ return this;
1493
+ },
1494
+ /**
1495
+ * Add a getValidators(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
1496
+ */
1497
+ getValidators(params) {
1498
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidators(params)));
1499
+ resultMappers.push((v) => client.decodeReturnValue('getValidators(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));
1500
+ return this;
1501
+ },
1502
+ /**
1503
+ * Add a getBlockTimestamps(uint64)uint64 method call against the RetiReader contract
1504
+ */
1505
+ getBlockTimestamps(params) {
1506
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBlockTimestamps(params)));
1507
+ resultMappers.push((v) => client.decodeReturnValue('getBlockTimestamps(uint64)uint64', v));
1508
+ return this;
1509
+ },
1510
+ /**
1511
+ * Add a getAlgodVersion(uint64[])string method call against the RetiReader contract
1512
+ */
1513
+ getAlgodVersion(params) {
1514
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAlgodVersion(params)));
1515
+ resultMappers.push((v) => client.decodeReturnValue('getAlgodVersion(uint64[])string', v));
1516
+ return this;
1517
+ },
1518
+ /**
1519
+ * Add a getAssets(uint64[])(uint64,address,uint64,uint8,string,string) method call against the RetiReader contract
1520
+ */
1521
+ getAssets(params) {
1522
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssets(params)));
1523
+ resultMappers.push((v) => client.decodeReturnValue('getAssets(uint64[])(uint64,address,uint64,uint8,string,string)', v));
1524
+ return this;
1525
+ },
1526
+ /**
1527
+ * Add a getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) method call against the RetiReader contract
1528
+ */
1529
+ getPoolBalancesAndLastPayouts(params) {
1530
+ promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getPoolBalancesAndLastPayouts(params)));
1531
+ resultMappers.push((v) => client.decodeReturnValue('getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)', v));
1532
+ return this;
1533
+ },
1534
+ get update() {
1535
+ return {
1536
+ bare: (params) => {
1537
+ promiseChain = promiseChain.then(async () => composer.addAppUpdate(await client.params.update.bare(params)));
1538
+ return this;
1539
+ },
1540
+ };
1541
+ },
1542
+ get delete() {
1543
+ return {
1544
+ bare: (params) => {
1545
+ promiseChain = promiseChain.then(() => composer.addAppDelete(client.params.delete.bare(params)));
1546
+ return this;
1547
+ },
1548
+ };
1549
+ },
1550
+ /**
1551
+ * Add a clear state call to the RetiReader contract
1552
+ */
1553
+ clearState(params) {
1554
+ promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));
1555
+ return this;
1556
+ },
1557
+ addTransaction(txn, signer) {
1558
+ promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));
1559
+ return this;
1560
+ },
1561
+ async composer() {
1562
+ await promiseChain;
1563
+ return composer;
1564
+ },
1565
+ async simulate(options) {
1566
+ await promiseChain;
1567
+ const result = await (!options ? composer.simulate() : composer.simulate(options));
1568
+ return {
1569
+ ...result,
1570
+ returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i](val) : val.returnValue)
1571
+ };
1572
+ },
1573
+ async send(params) {
1574
+ await promiseChain;
1575
+ const result = await composer.send(params);
1576
+ return {
1577
+ ...result,
1578
+ returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i](val) : val.returnValue)
1579
+ };
1580
+ }
1581
+ };
1582
+ }
1583
+ }
1584
+ /* BEGIN GHOST SDK CODE */
1585
+ import { getABIDecodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56';
1586
+ import { makeEmptyTransactionSigner } from 'algosdk';
1587
+ const emptySigner = makeEmptyTransactionSigner();
1588
+ class GhostBase {
1589
+ static factory = RetiReaderFactory;
1590
+ static client = RetiReaderClient;
1591
+ algorand;
1592
+ readerAccount = 'A7NMWS3NT3IUDMLVO26ULGXGIIOUQ3ND2TXSER6EBGRZNOBOUIQXHIBGDE'; // non-mainnet fee sink
1593
+ ghostAppId;
1594
+ factory;
1595
+ client;
1596
+ cacheParamsTimeout = 75; // ms
1597
+ constructor({ algorand, readerAccount, ghostAppId, }) {
1598
+ this.algorand = algorand;
1599
+ if (readerAccount)
1600
+ this.readerAccount = readerAccount;
1601
+ this.factory = this.algorand.client.getTypedAppFactory(RetiReaderFactory, {
1602
+ defaultSender: this.readerAccount,
1603
+ });
1604
+ this.ghostAppId = ghostAppId;
1605
+ this.client = this.factory.getAppClientById({ appId: ghostAppId ?? 13n });
1606
+ }
1607
+ async getAndCacheSuggestedParams() {
1608
+ const suggestedParams = await this.algorand.getSuggestedParams();
1609
+ if (this.cacheParamsTimeout) {
1610
+ this.algorand.setSuggestedParamsCache(suggestedParams, new Date(Date.now() + this.cacheParamsTimeout));
1611
+ }
1612
+ return suggestedParams;
1613
+ }
1614
+ async execute({ signature, txnBuilder, methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1615
+ await this.getAndCacheSuggestedParams();
1616
+ const methodName = signature.slice(0, signature.indexOf('('));
1617
+ let builder = this.client.newGroup();
1618
+ if (this.ghostAppId) {
1619
+ // deployed variant, we can call directly
1620
+ const argsArray = Array.isArray(methodArgsOrArgsArray) ? methodArgsOrArgsArray : [methodArgsOrArgsArray];
1621
+ for (let i = 0; i < argsArray.length; i++) {
1622
+ const args = argsArray[i];
1623
+ const extra = Array.isArray(extraMethodCallArgs) ? extraMethodCallArgs[i] : extraMethodCallArgs;
1624
+ builder = txnBuilder(builder, { args, signer: emptySigner, ...extra });
1625
+ }
1626
+ }
1627
+ else {
1628
+ // ghost variant
1629
+ // Avoiding .createTransaction because it compiles on the fly (why?). build app args and convert to app create
1630
+ let throwawayBuilder = this.client.newGroup();
1631
+ const argsArray = Array.isArray(methodArgsOrArgsArray) ? methodArgsOrArgsArray : [methodArgsOrArgsArray];
1632
+ for (let i = 0; i < argsArray.length; i++) {
1633
+ const args = argsArray[i];
1634
+ const extra = Array.isArray(extraMethodCallArgs) ? extraMethodCallArgs[i] : extraMethodCallArgs;
1635
+ throwawayBuilder = txnBuilder(throwawayBuilder, { args, signer: emptySigner, ...extra });
1636
+ }
1637
+ const { transactions } = await (await throwawayBuilder.composer()).buildTransactions();
1638
+ // convert to app creates, copy to new real builder
1639
+ for (const txn of transactions) {
1640
+ // @ts-ignore
1641
+ txn.applicationCall = {
1642
+ ...txn.applicationCall,
1643
+ appIndex: 0,
1644
+ approvalProgram: Buffer.from(APP_SPEC.byteCode.approval, 'base64'),
1645
+ clearProgram: Buffer.from(APP_SPEC.byteCode.clear, 'base64'),
1646
+ numGlobalByteSlices: APP_SPEC.state.schema.global.bytes,
1647
+ numGlobalInts: APP_SPEC.state.schema.global.ints,
1648
+ numLocalByteSlices: APP_SPEC.state.schema.local.bytes,
1649
+ numLocalInts: APP_SPEC.state.schema.local.ints,
1650
+ extraPages: 3,
1651
+ };
1652
+ builder = builder.addTransaction(txn, emptySigner);
1653
+ }
1654
+ }
1655
+ const { confirmations } = await builder.simulate({
1656
+ extraOpcodeBudget: 170000,
1657
+ allowMoreLogging: true,
1658
+ allowEmptySignatures: true,
1659
+ allowUnnamedResources: true,
1660
+ ...extraSimulateArgs,
1661
+ });
1662
+ const logs = confirmations.flatMap(({ logs }, i) => {
1663
+ if (!logs)
1664
+ throw new Error(`logs were not returned from simulate txn ${i}. this should never happen`);
1665
+ return logs.slice(0, -1);
1666
+ });
1667
+ const specRetObj = this.client.appSpec.methods.find(({ name }) => name === methodName)?.returns;
1668
+ if (!specRetObj)
1669
+ throw new Error('Method not found in app spec');
1670
+ const retTypeStr = specRetObj.struct ?? specRetObj.type;
1671
+ const retData = [];
1672
+ for (let i = 0; i < logs.length; i++) {
1673
+ retData.push(getABIDecodedValue(new Uint8Array(logs[i]), retTypeStr, this.factory.appSpec.structs));
1674
+ }
1675
+ return retData;
1676
+ }
1677
+ }
1678
+ export class RetiReaderSDK extends GhostBase {
1679
+ constructor(args) {
1680
+ super(args);
1681
+ }
1682
+ async getMbrAmountsAndProtocolConstraints({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1683
+ return this.execute({
1684
+ signature: 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))',
1685
+ txnBuilder: (builder, args) => builder.getMbrAmountsAndProtocolConstraints(args),
1686
+ methodArgsOrArgsArray,
1687
+ extraMethodCallArgs,
1688
+ extraSimulateArgs,
1689
+ });
1690
+ }
1691
+ async getValidatorConfig({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1692
+ return this.execute({
1693
+ signature: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
1694
+ txnBuilder: (builder, args) => builder.getValidatorConfig(args),
1695
+ methodArgsOrArgsArray,
1696
+ extraMethodCallArgs,
1697
+ extraSimulateArgs,
1698
+ });
1699
+ }
1700
+ async getValidatorStates({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1701
+ return this.execute({
1702
+ signature: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
1703
+ txnBuilder: (builder, args) => builder.getValidatorStates(args),
1704
+ methodArgsOrArgsArray,
1705
+ extraMethodCallArgs,
1706
+ extraSimulateArgs,
1707
+ });
1708
+ }
1709
+ async getPools({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1710
+ return this.execute({
1711
+ signature: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
1712
+ txnBuilder: (builder, args) => builder.getPools(args),
1713
+ methodArgsOrArgsArray,
1714
+ extraMethodCallArgs,
1715
+ extraSimulateArgs,
1716
+ });
1717
+ }
1718
+ async getNodePoolAssignments({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1719
+ return this.execute({
1720
+ signature: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
1721
+ txnBuilder: (builder, args) => builder.getNodePoolAssignments(args),
1722
+ methodArgsOrArgsArray,
1723
+ extraMethodCallArgs,
1724
+ extraSimulateArgs,
1725
+ });
1726
+ }
1727
+ async getValidators({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1728
+ return this.execute({
1729
+ signature: 'getValidators(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]))',
1730
+ txnBuilder: (builder, args) => builder.getValidators(args),
1731
+ methodArgsOrArgsArray,
1732
+ extraMethodCallArgs,
1733
+ extraSimulateArgs,
1734
+ });
1735
+ }
1736
+ async getBlockTimestamps({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1737
+ return this.execute({
1738
+ signature: 'getBlockTimestamps(uint64)uint64',
1739
+ txnBuilder: (builder, args) => builder.getBlockTimestamps(args),
1740
+ methodArgsOrArgsArray,
1741
+ extraMethodCallArgs,
1742
+ extraSimulateArgs,
1743
+ });
1744
+ }
1745
+ async getAlgodVersion({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1746
+ return this.execute({
1747
+ signature: 'getAlgodVersion(uint64[])string',
1748
+ txnBuilder: (builder, args) => builder.getAlgodVersion(args),
1749
+ methodArgsOrArgsArray,
1750
+ extraMethodCallArgs,
1751
+ extraSimulateArgs,
1752
+ });
1753
+ }
1754
+ async getAssets({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1755
+ return this.execute({
1756
+ signature: 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)',
1757
+ txnBuilder: (builder, args) => builder.getAssets(args),
1758
+ methodArgsOrArgsArray,
1759
+ extraMethodCallArgs,
1760
+ extraSimulateArgs,
1761
+ });
1762
+ }
1763
+ async getPoolBalancesAndLastPayouts({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
1764
+ return this.execute({
1765
+ signature: 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)',
1766
+ txnBuilder: (builder, args) => builder.getPoolBalancesAndLastPayouts(args),
1767
+ methodArgsOrArgsArray,
1768
+ extraMethodCallArgs,
1769
+ extraSimulateArgs,
1770
+ });
1771
+ }
1772
+ }
1773
+ /* END GHOST SDK CODE */